Avatar billede alexander_j Nybegynder
07. oktober 2006 - 09:54 Der 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
Avatar billede mugs Novice
07. oktober 2006 - 10:12 #1
Hvis du har 2 datofelter i formularen kan du bruge denne ved at referere til dine datofelter:

DoCmd.OpenReport "rpt2", acViewPreview, , "[Tabel1]![dato]>= #" & Me!dato & "# And [Tabel1]![dato2]<= #" & Me!dato2 & "#"

Får du problemer vender du tilbage, blot er jeg ikke hjemme før 19:00 (arbejde, suk!)
Avatar billede -anders- Juniormester
07. oktober 2006 - 10:20 #2
Hej  alexander

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å
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 10:45 #3
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?
Avatar billede -anders- Juniormester
07. oktober 2006 - 10:49 #4
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)
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 10:56 #5
gerne - admin(snabelting)bogstav.dk
Avatar billede -anders- Juniormester
07. oktober 2006 - 11:04 #6
Demobase sendt
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 12:43 #7
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?
Avatar billede -anders- Juniormester
07. oktober 2006 - 12:58 #8
Hej igen

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.
Avatar billede -anders- Juniormester
07. oktober 2006 - 13:00 #9
Her er linket til artiklen vedr. brugerdefineret menuer

http://www.eksperten.dk/artikler/708
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 14:27 #10
-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?
Avatar billede mugs Novice
07. oktober 2006 - 19:27 #11
Hvad er staus nu?
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 20:52 #12
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.
Avatar billede alexander_j Nybegynder
07. oktober 2006 - 20:54 #13
-anders- må hellere huske at komme med et svar - så fordeler jeg point, når jeg(mugs) har fundet ud af om jeg kan samle betingelserne.
Avatar billede mugs Novice
07. oktober 2006 - 22:58 #14
Undskyld den sene tilbagemelding - Blev kaldt på arbejde igen. Kan du prøver at forklare med andre ord hvilke betingelser du vil have opfyldt.

Det er muligt, at det fremgår af ovenstående indlæg, men nu har jeg stort set siddet foran en skærm siden Kl 06:00, så mine øjne er lidt firkantede.
Avatar billede alexander_j Nybegynder
08. oktober 2006 - 08:25 #15
Her er en let omskrivning af min kode på knappen i min form:

rep_str = ""
If [com_user] <> -1 Then rep_str = "[comments]![user_id]=" & [com_user]
DoCmd.OpenReport "user_comments_report", acViewPreview, , rep_str
DoCmd.Close acForm, "make_report"

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.


I knappens kode har jeg forsøgt mig med:

rep_str = rep_str & "[comments]![t_date]>=#" & [tex_date_from] & "# AND [comments]![t_date]<=#" & [tex_date_too] & "#"

Men af en eller anden grund udelukkede den ingenting og viste bare alle datoer.
Avatar billede -anders- Juniormester
08. oktober 2006 - 10:32 #16
Svar :o)
Avatar billede alexander_j Nybegynder
07. november 2006 - 11:15 #17
Bedre sent end aldrig
Avatar billede mugs Novice
07. november 2006 - 12:36 #18
Tak for point ;o)
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