Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Witam

Mam problem z uzyskaniem efektu "dynamicznego sortowania listy w formularzu" (bynajmniej tak to nazwałem :) )
Efekt ma być taki żeby można było sortować listę za pomocą pól kombi w nagłówku - takie filtrowanie.
Zdjęcie poniżej

Obrazek


To filtrowanie w zamyśle miało być proste (np: tylko kategoria) oraz złożone (np: kategoria+szczegóły+przedział czasowy)
Niestety zostałem tylko z zamysłem :/

Sama baza jest bajecznie prosta. Jedna tabela + tabele słownikowe.

Obrazek


Proszę o pomoc
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Dynamiczne sortowanie listy w formularzu

Nie nazwałabym tego sortowaniem, a filtrowaniem. Trzeba zmienić Źródło wierszy z tabeli (domyślam się, że tak jest to w tej chwili) na kwerendę z tej tabeli i ograniczeniem w niej rekordów poprzez odwołanie do wartości pól kombi.
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

ok...
napisałem kwerendę źródłową i ustawiłem w formularzu na pole kombi (to którym ma się wybierać kategorię filtrowania) akcję "Po aktualizacji" - "przeładuj kwerendę". Działa, bo w kwerendzie źródłowej jest:
 SELECT ALL
FROM tbl_glowna
WHERE ((tbl_glowna.kat) Like [FORMS]![filtrowanie].[Kombi54]);

Niestety nie działa już tak pięknie lub wcale kiedy dopisuję kolejne warunki dla kolejnego pola kombi (SZCZEGÓŁY/PODKATEGORIA).
Czy to jest dobry tok rozumowania? i czy w ogóle można tak napisać kwerendę źródłową aby klikanie i automatyczne filtrowanie działało dla: kategorii, podkategorii, podpodkategorii i jeszcze aby określać ramy czasowe dla data?
:)
hmmm...
siedzę nad tym już sporo i coś mi się wydaje, że brnę w ślepą uliczkę.
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Dynamiczne sortowanie listy w formularzu

Żeby jednocześnie zadziały wszystkie warunki w kwerendzie trzeba je w tej kwerendzie dopisać, łącząc słowem AND i podpiąć pod zdarzenie Po aktualizacji do każdego z tych pól.
Tak naprawdę - to najprościej byłoby to zrobić kodem VBA.
Złapałam grypę i dziś już nie mam siły, ale jutro rano opiszę szczegóły.
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

To tak jak ja. Grypa trzyma mnie już półtora tygodnia. Po jutrze czy przejdzie czy nie trzeba do roboty.
A wracając do tematu...
Jeśli wszystkie trzy warunki są spięte ANDem w kwerendzie głównej, to działa pod warunkiem, że wszystkie trzy warunki są uwzględnione, ale kiedy chcę tylko jeden warunek to już nie działa :/

A może błąd przy projektowaniu? Może kategorie, podkategorie, podpodkategorie powinny być zrobione w formie drzewa? Tylko, że niestety takich struktur wcześniej nie robiłem... :/Ten post został edytowany przez Autora dnia 18.11.13 o godzinie 23:02
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: Dynamiczne sortowanie listy w formularzu

Dodaj warunek na niewypełnienie pól kombi:

(tbl_glowna.kat) Like [FORMS]![filtrowanie].[Kombi54] OR [FORMS]![filtrowanie].[Kombi54] is null)
AND
( WARUNEK2 OR .. is null)
AND
( WARUNEK3 OR .. is null)

Będzie działało - choć nie koniecznie bardzo szybko (dużo warunków).

Można też próbować zrobić to przez VBA:


Private Sub ustaw_filtr
Me.Filter = '1=1'
if Me.Kombi54 <>'' then
Me.Filter = Me.Filter & " and tbl_glowna.kat = '" & Me.Kombi54 & '"
end if

if Me.Kombi_X <>'' then
Me.Filter = Me.Filter &" and tbl_glowna.X= '" & Me.Kombi_X & '"
end if

if Me.Kombi_Y <>'' then
Me.Filter = Me.Filter &" and tbl_glowna.Y= '" & Me.Kombi_Y & '"
end if

Me.FilterOn = True

End Sub


Procedure ustaw_filtr należy dodać do zdarzenia "after_update" ("po aktualizacji") wszystkich trzech pól kombi (będzie ustawiało filtr przy każdej zmianie) lub pod przyciskiem "ustaw filtr"Ten post został edytowany przez Autora dnia 19.11.13 o godzinie 13:40
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Bardzo dziękuję Ci za poświęcony czas jednak nie wniosło to (może jeszcze) nic nowego :/
Dodanie warunków w zapytaniu SQL (w źródle danych formularza) i podpięciu zdarzenia PONÓW KWERENDĘ w PO AKTUALIZACJI dla przycisku kombi którym wybieram warunek działa ale nieprawidłowo. To co wczoraj miałem czyli pierwszy warunek filtruje ale kiedy dojdzie drugi warunek, to wyświetla rekordy spełniające pierwszy oraz drugi warunek:

Obrazek

a kiedy zmienię SZCZEGÓŁY na MEDIA to nic nie pokaże nawet jak dodam GAZ :/

Wydaje mi się, że VBA jest tu rozwiązaniem, jednak ten język ogarniam 2/10.
Ten kod co dałeś to nie dziania :(
tam gdzie średnik powinien być cudzysłów?... tak zmieniłem za to później: W żadnym rekordzie nie znaleziono klucza wyszukiwania i debuger:

Obrazek


lipa :/
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Dynamiczne sortowanie listy w formularzu

Ten kod zmieniłabym na taki:
 Private Sub ustaw_filtr
Me.Filter = '1=1'
if nz(Me.Kombi54,"") <>"" then
Me.Filter = Me.Filter & " and tbl_glowna.kat ='" & Me.Kombi54 &"'"
end if

if nz(Me.Kombi_X,"")<>"" then
Me.Filter = Me.Filter & " and tbl_glowna.X='" & Me.Kombi_X &"'"
end if

if nz(Me.Kombi_Y,"") <>"" then
Me.Filter = Me.Filter &" and tbl_glowna.Y='" & Me.Kombi_Y & "'"
end if

Me.FilterOn = True

End Sub

Istotne są tu 2 sprawy, które może są mało widoczne:
pusty string oznacza się poprzez dwa znaki znaki cudzysłowia - bez spacji pomiędzy nimi
Jeżeli parametrem jest tekst - to musi być poprzedzony pojedynczym apostrofem górnym czyli np.
tbl_glowna.kat='" - po znaku równości jest apostrof i cudzysłów, a dalej, po znaku & - jest cudzysłów, a potem apostrof.
Idąc dalej - dla kombi do filtrowania daty - konieczny jest zamiast apostrofu znak #
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

zabieram się za testy :)
DZIĘKI
PS.
a żeby nadać ramy czasowe? od - do to jak by to wyglądało? :]

PS. 2
nie wiem czy to istotne ale klucze obce w głównej tabeli (pola po których ma być filtrowanie) są typu LICZBA a nie TEKSTTen post został edytowany przez Autora dnia 19.11.13 o godzinie 19:42
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Me.Filter = '1=1'

Błąd składni
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Dynamiczne sortowanie listy w formularzu

Sorry, tę linię przeoczyłam. Wpisz w pierwszej linii
me.filter=""

Jeżeli są to liczby (tzn. jeżeli typ danych w tabeli jest ustawiony jako liczba) - to wówczas opuść pojedyncze apostrofy - one są wstawiane tylko dla tekstu.
Warunek dla dat wyglądałby tak:
 Me.Filter = Me.Filter  &" and tbl_glowna.Data between #" & me.kombidata1 & "# and #" & me.kombidata2 & "#" 
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Błąd składniowy (brak operatora) w wyrażeniu kwerendy 'and tbl_glowna.kat = '3'

Debuger wywala błąd na czwartej linii:
Me.Filter = Me.Filter & " and tbl_glowna.kat = '" & Me.Kombi54 & ""
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Przepraszam za zamieszanie ale ni jak nie mogę sobie z tym poradzić, dlatego jeżeli ktoś będzie miał chwilę czasu i oczywiście jeśli będzie miał chęć i życzenie to niech pobierze bazę poniżej i sprawdzi jak to zrobić, a żeby w tym konkretnym przypadku zadziałało. Nie idę tym sposobem na łatwiznę, tylko brakuje mi już pomysłów i zdolności, a siedzę przy tym już naprawdę sporo.

BAZA

Z góry dziękuję
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Dynamiczne sortowanie listy w formularzu

Tej bazy nie da się pobrać, ja widzę same krzaczki :(
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: Dynamiczne sortowanie listy w formularzu

w pierwszej linii MUSI być:
Me.filter="1=1"
Z podwójnym cudzysłowem..

Dzięki temu wyrażenie filtra będzie postaci:
"1=1 and WARUNEK1 and WARUNEK2"

(bez tego powstaje nieprawidłowe wyrażenie: "and WARUNEK1 and WARUNEK2" )

Czyli kod taki jak podała Marzanna, z tą różnicą, że cudzysłów jest podwójny: " a nie pojedynczy 'Ten post został edytowany przez Autora dnia 20.11.13 o godzinie 08:46
Marian Nowoczesny

Marian Nowoczesny prezenter handlowy

Temat: Dynamiczne sortowanie listy w formularzu

Niestety dalej to nie działa

tu jest link do bazy:
http://admin-paprotki.za.pl/db/db.zip

aaajjj... faktycznie krzaki... ale w przeglądarce CHROME działało :]

*link poprawionyTen post został edytowany przez Autora dnia 20.11.13 o godzinie 20:55
Dariusz S.

Dariusz S. Food Technologists

Temat: Dynamiczne sortowanie listy w formularzu

Drogi kolego. Czy mógł byś mi taki form access udostępnić. Był Bym wdzięczny. Jest bardzo fajny.



Wyślij zaproszenie do