Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kwerenda wyszukująca - kryteria wyszukiwania

466 views
Skip to first unread message

kolch...@gmail.com

unread,
Apr 13, 2009, 2:55:57 PM4/13/09
to
Mam taki banał
Mam w kwerendzie kilka pol :
nr zamówienia, tytul, naklad i kilka jeszcze

ma kwerenda ma wyszukiwac rekordy po podaniu nr zamówienia, czyli w
kryteriach wklepalem np [podaj nr zamowienia]

Wszystko jest ok tylko chcialbym móc wklepec kilka nr i żeby wyszukało
mi kilka zamówień. Czy istnieje taka możliowść?

Przemysław Rachwał

unread,
Apr 13, 2009, 3:19:07 PM4/13/09
to

kilka to znaczy ile?
i czy są to zupełnie różne numery?

bo problem jest taki że ciężko jest na sztywno zdefiniować coś takiego w
kwerendzie

łatwiej jest zrobić dynamicznym SQL-em
(korzystamy z where id in(1,2,45,6,))
lub tabelą pomocniczą i relacją do tabeli gównej

--
Przemek

"Non sunt multiplicanda entia sine necessitate"
http://vbamania.blogspot.com

kolch...@gmail.com

unread,
Apr 13, 2009, 3:32:02 PM4/13/09
to
będą to różne nie powtarzające sie numery, a ilość niewiem, zależnie
od operatora, myślę ze do ok max 50

kolch...@gmail.com

unread,
Apr 13, 2009, 3:33:47 PM4/13/09
to
mam taki kod

SELECT ZAMOWIENIA.ID_zamowienia, ZAMOWIENIA.tytul,
ZAMOWIENIA.format_a, ZAMOWIENIA.format_b, ZAMOWIENIA.objetosc,
ZAMOWIENIA.naklad, OPRAWA.oprawa
FROM OPRAWA INNER JOIN ZAMOWIENIA ON OPRAWA.ID_oprawa =
ZAMOWIENIA.ID_oprawa
WHERE (((ZAMOWIENIA.ID_zamowienia)=[podaj nr]));

Przemysław Rachwał

unread,
Apr 13, 2009, 3:44:36 PM4/13/09
to
kolch...@gmail.com wrote:
> będą to różne nie powtarzające sie numery, a ilość niewiem, zależnie
> od operatora, myślę ze do ok max 50

w takim wypadku nie zrobisz tego za pomocą parametru
przed wywołaniem kwerendy mógł byś ją nadpisać z warunkiem w postaci

in (1,2,3,4,5,6)

));

co wymaga sklejenia tekstu SQL z 3 kawałków

albo

SELECT ZAMOWIENIA.ID_zamowienia, ZAMOWIENIA.tytul, ZAMOWIENIA.format_a,
ZAMOWIENIA.format_b, ZAMOWIENIA.objetosc, ZAMOWIENIA.naklad, OPRAWA.oprawa

FROM (OPRAWA INNER JOIN ZAMOWIENIA ON OPRAWA.ID_oprawa =
ZAMOWIENIA.ID_oprawa) INNER JOIN FILTR ON ZAMOWIENIA.ID_zamowienia =
FILTR.ID_zamowienia;

gdzie tabela filtr zawiera ID elementów do odfiltrowania
zawartość tej tabeli można budować dynamicznie poprzez dodanie akcji po
zaznaczenie w jakiejś liście lub cokolwiek tam sobie wybierzesz

Krzysztof Naworyta

unread,
Apr 14, 2009, 3:38:15 PM4/14/09
to
Juzer Przemysław Rachwał <przemysla...@gmail.com> napisał


(...)


| albo
|
| SELECT ZAMOWIENIA.ID_zamowienia, ZAMOWIENIA.tytul, ZAMOWIENIA.format_a,
| ZAMOWIENIA.format_b, ZAMOWIENIA.objetosc, ZAMOWIENIA.naklad,
| OPRAWA.oprawa FROM (OPRAWA INNER JOIN ZAMOWIENIA ON OPRAWA.ID_oprawa =
| ZAMOWIENIA.ID_oprawa) INNER JOIN FILTR ON ZAMOWIENIA.ID_zamowienia =
| FILTR.ID_zamowienia;
|
| gdzie tabela filtr zawiera ID elementów do odfiltrowania
| zawartość tej tabeli można budować dynamicznie poprzez dodanie akcji po
| zaznaczenie w jakiejś liście lub cokolwiek tam sobie wybierzesz


Swego czasu popełniłem SQL, który pobiera klucze z listy multiselect i
wprowadza je do pomocniczej tabeli, wykorzystanej w warunku EXISTS.

Oczywiście wszystko przy pomocy własnej funkcji (nie grymasić! ;) )
Adaptacja tego do wszelkich innych źródeł "wielu kluczy" (np. tekstu
rozdzielanego spacjami) jest trywialna, jeśli tylko rozumie sie kod:

http://groups.google.com/group/pl.comp.bazy-danych.msaccess/browse_thread/thread/12402c6ba43bbba7/ece06d7243d48380?hl=pl&lnk=gst&q=exists+insert+into+naworyta#ece06d7243d48380

--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)

ZULUS

unread,
Apr 15, 2009, 2:35:11 AM4/15/09
to
Przy wyszukiwaniu kilku czy kilkunastu nr ID (nie sprawdzalem dla
ilu maksymalnie nr ID - ale nawet przy 20 wpisanych nr ID dziala poprawnie )
ja stosuje taka skladnie:
SELECT Dane.ID, Dane.KLIENT, Dane.DATAFAK
FROM Dane
WHERE (((InStr([Wpisz szukane ID w formie: 1,2,3],[ID]))>0));
- WAZNE ! kazdy wpisywany nr ID musi byc oddzielony przecinkiem
Banalnie proste ale skuteczne


Uzytkownik <kolch...@gmail.com> napisal w wiadomosci
news:ff020a9c-5870-4fe3...@y9g2000yqg.googlegroups.com...

ZULUS

unread,
Apr 15, 2009, 2:39:29 AM4/15/09
to
W uzupełnieniu : oczywiście ma być średnik ... ] ; [ID] a nie przecinek

Użytkownik "ZULUS" <krzyszto...@delkar.pl> napisał w wiadomości
news:gs3v70$obd$1...@news.task.gda.pl...

Krzysztof Naworyta

unread,
Apr 15, 2009, 11:44:42 AM4/15/09
to
Juzer ZULUS <krzyszto...@delkar.pl> napisał

| Przy wyszukiwaniu kilku czy kilkunastu nr ID (nie sprawdzalem dla
| ilu maksymalnie nr ID - ale nawet przy 20 wpisanych nr ID dziala
| poprawnie ) ja stosuje taka skladnie:
| SELECT Dane.ID, Dane.KLIENT, Dane.DATAFAK
| FROM Dane
| WHERE (((InStr([Wpisz szukane ID w formie: 1,2,3],[ID]))>0));
| - WAZNE ! kazdy wpisywany nr ID musi byc oddzielony przecinkiem
| Banalnie proste ale skuteczne


1. Zapomniałeś o pierwszym parametrze fukcji InStr()
2. Banalnie proste, ale bardzo nieefektywne dla relatywnie dużej tabeli.
3. Niestety zarówno funkcja InputBox() jak okienko wpisywania wartości
parametru (nota bene prawdopodobnie na niej oparte), nie przyjmuje wpisów
dłuższych niż 255 znaków. Zakładając, że szukane klucze mają średnio 5
znaków (plus znak rozdzielający), otrzymujemy "raptem" max. ~40 kluczy ...

Najważniejszy IMO jest jednak pkt. 2.
Niemożność użycia indeksu w wyrażeniu InStr() mocno rzutuje na efektywność
takiego rozwiązania.

TedMi

unread,
Apr 14, 2009, 8:18:34 AM4/14/09
to
Jak juz pisali inni, tego sie nie da zrobic w definicji kwerendy. Problem
lezy w tym, ze kryterium musi wygladac tak:
...WHERE ZAMOWIENIA.ID_zamowienia IN(2,46,275)

Taka liste podzielona przecinkami nie mozna wklepac do dialogu parametru -
np. podanie ciagu 2,4 uzyskuje jeden rekord z ID=24.

Trzeba zbudowac kwerende dynamicznie, uzywajac VBA. Pokazac urzytkownikowi
formularz do którego wpisze liste numerów, potem ta liste przetworzyc na
odpowiedni format z przecinkami i nawiasami, i dokleic do reszty kwerendy,
która jest niezmienna.

Zycze powodzenia.
-TedMi

<kolch...@gmail.com> wrote in message
news:ff020a9c-5870-4fe3...@y9g2000yqg.googlegroups.com...

0 new messages