Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Witam.
Mam niemały problem, a dokładnie posiadam formularz na którym znajdują się cztery pola kombi służące do wyszukiwania danych ("Nazwisko", "Tytul", "Rok_Wydania", "Wydawnictwo") - pola te oparte są na kwerendach.
Problem w tym, że jak chce wyszukać po nazwisku i przykładowo po roku wydaniu wyszukuje mi zarówno po nazwisku i po roku ale nie filtruje po wybranym nazwisku (sęk w tym, że jak wybieram z pola kombi Nazwisko - to chce by wyszukując po pozostałych polach, wyszukiwało tylko dla wybranego autora z pola kombi "Nazwisko" , którego wybrano w polu kombi Nazwisko).

Proszę o szybka odpowiedź wtajemniczonych osobników" - sprawa wagi państwowej (praca magisterska) - a czasu niewiele.

Jednocześnie dziekuje za nadsyłanie konkretnych odpowiedzi.Rafał Zdybek edytował(a) ten post dnia 26.08.10 o godzinie 16:43
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Pokaż zapytanie, które wywołujesz, żeby uzyskać wynik.
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

SELECT AUTOR.ID_Autora, [Nazwisko_Autora] & " " & [Imie_Autora] AS [Nazwisko/Imię], MONOGRAFIE.Tytul, MONOGRAFIE.Rok_Wydania, WYDAWNICTWO.Nazwa_Wydawnictwa, WYDAWNICTWO.Miejsce_Wydania

FROM WYDAWNICTWO INNER JOIN (MONOGRAFIE INNER JOIN (AUTOR INNER JOIN [AUTOR/MONOGRAFIE] ON AUTOR.ID_Autora = [AUTOR/MONOGRAFIE].ID_Autora) ON MONOGRAFIE.ID_Monografii = [AUTOR/MONOGRAFIE].ID_Monografii.Value) ON WYDAWNICTWO.ID_Wydawnictwa = MONOGRAFIE.ID_Wydawnictwa

WHERE (((AUTOR.Nazwisko_Autora)=[Forms]![Wyszukiwanie]![Kombi80])) OR (((MONOGRAFIE.Tytul)=[Forms]![Wyszukiwanie]![Kombi83])) OR (((WYDAWNICTWO.Nazwa_Wydawnictwa)=[Forms]![Wyszukiwanie]![Kombi109])) OR (((MONOGRAFIE.Rok_Wydania)=[Forms]![Wyszukiwanie]![Kombi87]))

ORDER BY [Nazwisko_Autora] & " " & [Imie_Autora];

-------------------
..nie wiem czy Ci" o to chodzi, bo ja tak lekko kumaty z tego, a prace trza zrobić.
Zmieniając w klauzuli "WHERE" operatory "OR" na Operatory "AND" powodują iż użytkownik musi wybrać parametry z wszystkich pól kombi, a tego nie chcemy.
Zamieścił bym obrazek (tego formularza) tylko nie bardzo wiem jak to zrobić..
hhhhRafał Zdybek edytował(a) ten post dnia 26.08.10 o godzinie 19:01
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

A co domyślnie wstawiasz, jeżeli użytkownik nie wybierze niczego np. z pola Nazwisko? NULL / pusty znak/ jakiś ciąg liter?
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Jeżeli użytkownik nie wybierze niczego i przyciśnie przycisk wyszukaj to wyświetli mu się formularz (który zbudowany jest o kwerendę) do którego jest przypisana akcja (Otwórz formularz), z tym że na tym formularzu nic nie będzie, żadnych danych.
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Jeżeli w zapytaniu leci wartość NULL to skorzystaj z funkcji NZ i zamiast warunku kolumna = wartosc zrób kolumna like wartosc. LIKE szuka ciągu, w którym możesz użyć wildcardów (np * - ciąg dowolnej długości), NZ to funkcja obsługująca wartości NULL.
Nz(wariant [, wartość_jeśli_null ] )

Np.

(AUTOR.Nazwisko_Autora) like NZ([Forms]![Wyszukiwanie]![Kombi80],'*')

Jeżeli wyszukujesz wykorzystując nazwisko dostaniesz :

(AUTOR.Nazwisko_Autora) like NZ('Drzymała','*') czyli
(AUTOR.Nazwisko_Autora) like 'Drzymała' co zachowuje się jak
(AUTOR.Nazwisko_Autora) = 'Drzymała'

Jeżeli wyszukujesz i nie wykorzystujesz nazwiska dostaniesz:
(AUTOR.Nazwisko_Autora) like NZ(NULL,'*') czyli
(AUTOR.Nazwisko_Autora) like '*' co oznacza - wyszukaj wszystkie elementy (nie wyszuka nulli)

Aha.. Sprawdź sobie w necie składnię, bo Accessa nie za bardzo znam ;)
Jeżeli wytłumaczenie jest niejasne (a pewnie jest ;) ) to masz 2 linki do operatora LIKE i funkcji NZ:

http://office.microsoft.com/pl-pl/access-help/operator...
http://office.microsoft.com/pl-pl/access-help/funkcja-...

Edit:

No i oczywiście jak już tak zrobisz wszędzie to zmień też operatory z OR na AND :)Grzegorz Drzymała edytował(a) ten post dnia 26.08.10 o godzinie 20:55
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Podziękował bardzo, będe cos z tym próbował. Jak cos mi nie bedzi szło to będe pisał.
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

"Stary" - jesteś wielki, wpisałem wg. wzoru jaki mi podałeś i hula !!
____________

Jeszcze jedno, jak byś mógł mi powiedzieć jak zrobić: wyszukiwanie tytułu po 'słowach kluczowych' w formularzu, (tak żeby nie wybierać z pola kombi lub nie wpisywać całego tytułu, tylko np. wpisać jeden wyraz z danego tytułu i żeby wyszukało pozycje z takim to wpisanym przez nas wyrazem.
Wiem, że to można coś pokombinować z operatorem "like" , ale nie do końca wiem jak to zrobić.
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Tak na szybko - użyj maski * po jednej i po drugiej stronie szukanego słowa.
Dla pewności użyj funkcji UCASE żeby wielkość liter na pewno się zgadzała np :

ucase((MONOGRAFIE.Tytul)) like ucase('*wartosc*')
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Ok, tylko gdzie ja mam tą funkcje wstawić ??
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Tworzysz sobie jakieś pole tekstowe, w które będziesz wpisywał to co chcesz wyszukać (jakiś fragment tekstu) i przycisk - wyszukaj.

Po wpisaniu tekstu i kliknięciu wyszukaj powinieneś wywołać jakieś zapytanie np.

select *
from tabela
where i tutaj ten warunek

czyli

select *
from MONOGRAFIE
where ucase((MONOGRAFIE.Tytul)) like ucase('*wpisana_wartosc*')
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

..kurna nie wiem o co biega, wstawiłem pole tekstowe, utworzyłem przycisk "wyszukaj", stworzyłem nową kwerendę z której będą korzystać stworzone formanty (choć nie wiem czy to było potrzebne - czy można było przypisać działanie tych formantów w oparciu o starą kwerendę, którą wykorzystywałem przy polach kombi ?).

W tej nowej kwerendzie w widoku SQL tworzy mi się coś takiego:

WHERE UCase(((MONOGRAFIE.Tytul) Like UCase("*[Forms]![Wyszukiwanie]![Tekst117]*")));
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Przykro mi - nie znam Accessa - nie za bardzo moge pomoc z pierwsza czescia twojej wypowiedzi.

Co do drugiej (utworzonej kwerendy) - cos mi nie pasuja nawiasy

Nie mozna tego zrobic tak?
WHERE UCase(MONOGRAFIE.Tytul) Like UCase("*[Forms]![Wyszukiwanie]![Tekst117]*");
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

...coś nie gra - tylko nie wiem co ??
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

Ja tym bardziej nie wiem.

Spróbuj jeszcze ten warunek:

UCase("*[Forms]![Wyszukiwanie]![Tekst117]*");

rozbić w ten sposób

"*" & UCase("[Forms]![Wyszukiwanie]![Tekst117]") & "*"

& - to z tego co wiem - operator konkatenacji.Grzegorz Drzymała edytował(a) ten post dnia 27.08.10 o godzinie 16:06
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Jeżeli mam taki warunek:
WHERE (((MONOGRAFIE.Tytul) Like UCase([Forms]![Wyszukiwanie]![Tekst117])));

To wpisując w polu tekstowym muszę wpisać cały tytuł - a mi chodzi" by wpisać tylko konkretny wyraz i wyszukało tytuły zawierające powyższy, wpisany wyraz.

Czuje, że jesteśmy" blisko..
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

czytaj uważnie co pisze.

W warunku, który używasz brakuje * z przodu i z tyłu

Chcesz wyszukać np. "Harry Potter"

Przy warunku :

WHERE (((MONOGRAFIE.Tytul) Like UCase([Forms]![Wyszukiwanie]![Tekst117])));

Wpisujesz Harry i ... nie dostajesz wyniku.

Przy warunku
WHERE (((MONOGRAFIE.Tytul) Like UCase(*[Forms]![Wyszukiwanie]![Tekst117]*)));
lub opcjonalnie (nie znam prawidłowej składni accessa)
WHERE (((MONOGRAFIE.Tytul) Like "*" & UCase("[Forms]![Wyszukiwanie]![Tekst117]") & "*"

zadziała magiczna * i dostaniesz rezultat - Harry Potter, Brudny Harry itp...
Rafał Zdybek

Rafał Zdybek Student, Uniwersytet
Rzeszowski

Temat: Formularze - filtrowanie

Działa !!!
Poprawna składnia - w zasadzie to co pisałeś:
WHERE (((MONOGRAFIE.Tytul) Like "*" & UCase([Forms]![Wyszukiwanie]![Tekst117]) & "*"));

Dzięki fest, za porady, jestem twoim dłużnikiem".
Jak bede miał jeszcze jaki problem, a zapewne coś się napatoczy to będę pisał. Jeszcze raz dziękuje.

Pozdrawiam_do usłyszenia.
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Formularze - filtrowanie

To mogę spokojnie jechać na urlop ;)

konto usunięte

Temat: Formularze - filtrowanie

Rafał Zdybek:
Działa !!!
Poprawna składnia - w zasadzie to co pisałeś:
WHERE (((MONOGRAFIE.Tytul) Like "*" & UCase([Forms]![Wyszukiwanie]![Tekst117]) & "*"));

Dzięki fest, za porady, jestem twoim dłużnikiem".
Jak bede miał jeszcze jaki problem, a zapewne coś się napatoczy to będę pisał. Jeszcze raz dziękuje.

Pozdrawiam_do usłyszenia.

inna grupa będzie lepsza jeżeli chodzi o Access np.
http://www.goldenline.pl/grupa/ms-access/
http://www.goldenline.pl/grupa/access-w-praktyce/

dobre miejsca to też:
http://www.coderscity.net/forum40.html
http://wss.pl/frmThreads.aspx?gid=25
http://groups.google.pl/group/pl.comp.bazy-danych.msac...Przemysław R. edytował(a) ten post dnia 27.08.10 o godzinie 17:21

Następna dyskusja:

Access 2007 - Filtrowanie i...




Wyślij zaproszenie do