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ść?
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
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]));
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
(...)
| 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:
--
KN
archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
Uzytkownik <kolch...@gmail.com> napisal w wiadomosci
news:ff020a9c-5870-4fe3...@y9g2000yqg.googlegroups.com...
Użytkownik "ZULUS" <krzyszto...@delkar.pl> napisał w wiadomości
news:gs3v70$obd$1...@news.task.gda.pl...
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.
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...