07. oktober 2006 - 09:54Der er
16 kommentarer og 2 løsninger
udtræk udfra datoer fra og til
Jeg har en tabel med navnet 'comments' og fra den tabel vil jeg gerne lave et udtræk via en formular og lidt VB-script, hvor brugeren skriver startdato og slutdato.
mit udtræk laves med følgende kode: DoCmd.OpenReport type_str, acPreview, , rep_str
Jeg har lavet en messagebox for at se hvad min kode generede variablen rep_str til - og det skulle være: [comments]![active]=true AND [comments]![t_date]>=#01-08-2006# AND [comments]![t_date]<=#31-12-2006#
Mit problem er at den ikke kun tager datoer mellem den 1. august 2006 og d. 31. december 2006 - den tager alle datoer.
Håber nogen kan hjælpe - og gerne så hurtigt som muligt :-D
Hvis du mener poster imellem to datoer med active true, kunne du lave en parameterforspørgsel, og bruge denne som som postkilde til din rapport. Hvis man anvender [] i en forspørgsel bliver man promtet for en værdi. Eks.
I datofeltet på forspørgsel i kriteriefeltet:
Between [Indtast startdato]And [Indtast slutdato]
Hvis det er det du mener findes mere elegante måder at gøre det på
mugs -> jeg synes det er præcist det jeg har gjort - med en lille undtagelse - med mine variabler bliver mit kald jo: DoCmd.OpenReport "min_rapport", acPreview, , "[comments]![t_date]>=#01-08-2006# AND [comments]![t_date]<=#31-12-2006#"
-anders- -> [comments]![active]=true er nok sekundær i denne sammenhæng - det er blot fordi jeg gerne vil have en mulighed for at gøre poster inaktive uden at slette dem. Kan between sættes ind i et sådan kald som jeg beskriver ovenfor?
Ja det tror jeg, men er ikke nogen haj til SQL sætninger. Access indbygget måde at gøre det på er meget anvendligt, hvis du vil se et eks. på en parameterforspørgsel der trækker poster i mellem 2 brugerdefineret indtastet datoer med en pæn brugerflade så post em mailadresse så sender jeg den til dig :o)
Har fået dit eksempel til at virke med min database. I min formular har brugeren mulighed for at vælge mellem 'alle brugere' eller en specifik bruger via en dropdown-box. Hvis brugeren vælger 'alle brugere', så laves der ingen ekstra betingelser, men hvis brugeren vælger en specifik bruger, så laves der en betingelse der hedder noget i retning af: "[comments]![user_id]=valgte_brugers_brugerid" Dette sætter jeg i en SQL-sætning når jeg åbner en rapport.
Nu er det at jeg synes det er noget rod at jeg både definere betingelser i forespørgselsdelen og i SQL-sætning - er det ikke muligt at samle det kun et af stederne?
I dit databaseeksempel er der et lille trick jeg gerne vil aflure dig - sikkert bare en eller anden parameter - når man åbner din formular i ikke designvisning, så har du deaktiveret menupunkterne som ellers fremkommer ved højreklik, således at der ikke så nemt kan ændres i fx egenskaber - hvordan gør du det?
Det med brugerene har jeg ikke lige et bud på, men du kunne oprette en comboks på formularen og sætte rækkekilden til din "brugertabel". I forspørgslen med datokriterier kunne indsætte kriterier på samme måde som i datofeltet, husk at medtage brugerfeltet fra tabellen i forsprøgslen, men kun en ide.
Mht. til højreklik på min formular har jeg ikke gjort noget, grunden til at mange af højrekliksmenuerne ikke er aktive er simpelthen den: min formular er ubunden dvs. at den ikke har noget postkilde, den anvendes udelukkende som brugergrænseflade. Når en formular anvendes på denne måde er de omtalte hjørekliksmenuer ikke aktiveret.
Du kan altid i design for en formular under fanebladet andre deaktivere højrekliksmenuen for formularen så vises den slet ikke uanset om formularen har en postkilde eller ej.
Jeg har skrevet en artikel om brugerdefineret menuer i Access, artiklen er gratis, jeg hitter lige linket og poster det i en ny kommentar.
-anders- -> tak nu virker systemet i hvert fald, men jeg afventer lige mugs (eller andre) - måske de har en løsning til det med at samle betingelserne et sted.
Forøvrigt har jeg jo lige netop sådan en combobox som du foreslår - men min combobox har bare et punkt udover det med de enkelte brugere, nemlig et der hedder 'alle brugere' og etsådan kan forespørgselsdelen jo ikke behandle.
Tak for hjælpen - det var jo bare at slå parametren for genvejsmenuen fra. Mon man også ved en eventuel fejl kunne undgå at brugeren går ind i debug-delen af VBScriptkoden?
Status er at det virker - hvilket er godt og også godt nok hvis det er.
Jeg er dog lidt utilfreds med at mine samlede betingelserne defineres to steder. Jeg definere i forespørgslen mellem hvilke datoer den skal vise data fra - det gøres med en between-komando. Jeg definere alle eller specifikke brugere via en SQL-sætning.
Det synes jeg er lidt rodet, men som sagt så virker det jo.
Her kan du se at hvis [com_user] er valgt til værdien -1 (alle brugere) så sættes rep_str til ingenting ellers sættes rep_str til betingelsen at user_id skal være den samme som [com_user] (altså en specifik bruger).
I forespørgslen har jeg sat følgende betingelse:
Between [Forms]![make_report]![tex_date_from] And [Forms]![make_report]![tex_date_too]
Denne sørger for at der kun medtages datoer mellem tex_date_from og tex_date_too.
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.