Avatar billede henrik_ffc Nybegynder
05. december 2002 - 13:00 Der er 12 kommentarer og
2 løsninger

Dynamisk filter

Hej

Først en advarsel: Jeg er komplet nybegynder i access. Jeg kender til databaser og SQL generelt, men har aldrig før brugt access.

Jeg har en database, som jeg kan få vist pænt i en formular. Nu vil jeg gerne kunne lægge et filter på disse data, så brugeren selv kan bestemme fra-dato og til-dato. Altså lave en visning af alle data mellem disse to tider.
I tabellen har jeg naturligvis et dato-felt og jeg havde forestil mig noget i stil med at der skulle være to felter til indtastning af de to grænser (alternativt to drop-down menuer med alle muligheder) hvorefter man skal trykke på en opdater-knap.
Et tryk på knappen kunne så resultere i en ny forspørgsel i tabellen med grænserne indsat som where-klausuler.
Men hvordan laver man noget sådant???

Jeg bruger Access 2002 på Win 2000

Er der eventuelt en god online guide så jeg også kan komme videre med andre af mine småproblemer?
Avatar billede hekla Nybegynder
05. december 2002 - 17:30 #1
Du kan lave det som to formularer, hvor du i den første formular har to felter: Startdato og Slutdato, som kan udfyldes.
Derefter kan du med en kommandoknap åbne den anden formular baseret på forespørgslen:

SELECT * FROM MinTabel
WHERE (((Dato)>[forms]![f_minformular]![startdato])AND (Dato)<[forms]![f_minformular]![slutdato]));
Avatar billede hugopedersen Nybegynder
06. december 2002 - 07:10 #2
Jeg har før lavet noget lignende ved at lave 2 comboboxe hvor jeg tager alle datoer fra tabellen på en grupperet liste. Jeg sorterer så sådan at de viser datoerne i forskellige rækkefølger så jeg med det samme har højeste og laveste dato hvilket giver alle records.
Du kan så bygge din SQL på comboboxenes On change event og requery formularen. Hvis du samtidig laver en knap der hedder 'Vis alle' hvor du bare laver en SELECT * uden kriterier, så er du nået et langt stykke af vejen.
Alt dette kan du f.eks. smide op i headeren på din formular, så kan du nøjes med 1 formular i stedet for 2 !
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 10:01 #3
OK, nu har jeg lavet en del om i min formular og har indsat to ComboBoxes
til StartDato og SlutDato. Det giver mig følgende problemer:

Felterne er blanke før jeg vælger noget. Det betyder at min forspørgsel
ikke har noget at sætte ind i "where"-delen før jeg har valgt en fornuftig
dato. Hvordan vælger jeg den første fra listen som default-værdi?
Indholdet af listen er lavet på baggrund af denne forspørgsel:
select distinct dato from MinTabel;

Når der er ændringer i felterne skulle dette gerne trigger en opdatering
af formularen. Dette gør jeg ved at lave require ved en passende event,
men jeg har problemer med at trække værdien fra mine combiboxe over i
SQL'en. Jeg har prøvet således:
... where (dato>=[MinForm]![StartDatoCombi]) ...
Det resulterer i at der popper en dialogbox frem, der spørger efter
værdien [MinForm]![StartDatoCombi], når jeg åbner formularen.
Tilsyneladende mangler jeg 'et-eller-andet'???

I har allerede hjulpet mig i den rigtige retning, så de oprindelige 30 point
betragter jeg som brugt (men dog ikke udbetalt pt), så jeg smider nogle flere
points efter de ekstra spørgsmål.
Avatar billede hugopedersen Nybegynder
12. december 2002 - 10:08 #4
På formularens 'On open' event kan du f.eks. skrive Me.cboFromDate=Me.cboFromDate-Itemdata(0) som indsætter det første item på listen som default.
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 11:14 #5
Den brokker sig over ItemData!
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 11:17 #6
Fik den til at virke ved at skrive . istedet for - :-)
Avatar billede hugopedersen Nybegynder
12. december 2002 - 11:20 #7
UPS my mistake :-)
Avatar billede hugopedersen Nybegynder
12. december 2002 - 11:24 #8
Dit andet 'problem' kan jeg ikke lige gennemskue. Er det hver gang du ændrer et eller andet i comboboxen at der skal opdateres ?  I så fald har de en 'On change' event som du måske kunne bruge.
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 12:04 #9
OK, jeg har vist kun et enkelt problem tilbage. Jeg har fået lavet to
comboboxe med startdato og slutdato. Disse boxe indeholder en oversigt
over de mulige datoer jeg har i min tabel (select distinct dato from MinTabel)
og som standard er første og sidste dato valgt som default værdier til
henholdsvis fradato og tildato.
Disse boxe er indsat i formularens header.

I detail-delen er så selve resultatet at en forespørsel. Denne forespørgsel
skal kunne benytte mine fra- og til datoer til at afgrænse resultatet.
Jeg har prøvet at indsætte
... where ((dato>=Forms!MinForm!FraDato) and (dato<=Forms!MinForm!TilDato))
men dette resulterer i at resultetet bliver tomt.
Jeg prøvede så for sjov skyld at lave en
select Forms!MinForm!FraDato from... og vise resultatet på formen, og
det viser sig at denne værdi er blank.

Mit problem er altså at få fat i værdien fra comboboxen og benytte den
i min forespørgsel.
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 12:15 #10
Nu har jeg fundet ud af at Forms!MinForm!FraDato kun er tom
første gang formularen startes. Når jeg skifter værdien hentes
den korrekte værdi over i SQL og benyttes.
Problemet er altså kun at benytte 'default' værdien.
Avatar billede hugopedersen Nybegynder
12. december 2002 - 12:20 #11
Den skal du ( selvfølgelig ) putte ind på formulaerne 'On open' event - lige efter at du har sat den ind i comboboxen.
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 12:28 #12
Øh, hvad mener du lige med det?
Jeg henter allerede defaultværdien ind i felterne i formen
med me.fradato=me.fradato.itemdata(0), som du skrev, men
det virker som om at forspørgslen køres FØR værdierne er nået
at komme 'på plads'
Defaultværdierne VISES i felterne i formen, men bliver bare ikke
brugt i SQL'en.

Jeg har sat en "requery" ind efter at jeg kopiere 1.værdi i
comboboxene over som defaultværdi - og nu virker det sørme!
Avatar billede hugopedersen Nybegynder
12. december 2002 - 12:36 #13
Det kan være at du skal flytte me.fradato=me.fradato.itemdata(0) til formularens 'On load' event - jeg er dog ikke sikker på om det gør nogen forskel.
Avatar billede henrik_ffc Nybegynder
12. december 2002 - 12:41 #14
Det havde ingen effekt, men op i r..... - Nu virker det!!

:-D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester