05. december 2002 - 13:00Der 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?
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]));
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 !
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.
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.
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.
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.
Ø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!
Det havde ingen effekt, men op i r..... - Nu virker det!!
:-D
Synes godt om
Ny brugerNybegynder
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.