Avatar billede jasman Nybegynder
19. august 2004 - 21:02 Der er 6 kommentarer og
1 løsning

Problemer med at udsøge data ved hjælp af dato

Hej eksperter.

Jeg sidder og undrer mig BRAVT over Access 97.

Jeg har en form, hvor jeg viser nogle data, hvor jeg bl.a. afgrænser på et datofelt.
Jeg spørger på data, som har en dato <= dags dato + en visningshorisont (antal dage).
Jeg har lavet noget kode som konstruerer en ny sql-sætning til recordssourcen på min form (den udskifter simpelthen en dato i sql-udtrykket alt efter hvad jeg angiver i visningshorisont), og en knap, som genfrisker skærmen.

SQL-statementet ser nogenlunde sådan ud:

SELECT DISTINCTROW Saelger.SælgerKode, Kontaktlog.OpfølgendeSælger, Kontaktlog.AftaleDato, Kontaktlog.AftaltKontaktForm, Firma.FirmaNavn, Kontaktlog.Opfulgt, "Opfulgt" AS Udtryk1, KontaktPerson.Fornavn, KontaktPerson.Efternavn, KontaktPerson.Stillingsbetegnelse, Kontaktlog.KontaktlogId, Kontaktlog.Opfølgdato
FROM Saelger INNER JOIN (Firma INNER JOIN (KontaktPerson INNER JOIN Kontaktlog ON KontaktPerson.KontaktPersonNummer = Kontaktlog.KontaktPersonNummer) ON Firma.FirmaNummer = KontaktPerson.Firmanummer) ON Saelger.SælgerKode = Kontaktlog.OpfølgendeSælger
WHERE (((Kontaktlog.AftaleDato)<=#09-09-2004#) AND ((Kontaktlog.Opfulgt)=False) AND ((Saelger.UserId)=CurrentUser()));

Hvor det er strengen #09-09-2004# der bliver udskiftet, når jeg opdaterer min visningshorisont.

Kan nogen fortælle mig, hvorfor ACCESS 97 konsekvent NÆGTER at vise data, hvis datoen ligger mellem d. 1. og d. 8. (begge inkl.) i en måned.

F.eks. vises data fint ved:

SELECT DISTINCTROW Saelger.SælgerKode, Kontaktlog.OpfølgendeSælger, Kontaktlog.AftaleDato, Kontaktlog.AftaltKontaktForm, Firma.FirmaNavn, Kontaktlog.Opfulgt, "Opfulgt" AS Udtryk1, KontaktPerson.Fornavn, KontaktPerson.Efternavn, KontaktPerson.Stillingsbetegnelse, Kontaktlog.KontaktlogId, Kontaktlog.Opfølgdato
FROM Saelger INNER JOIN (Firma INNER JOIN (KontaktPerson INNER JOIN Kontaktlog ON KontaktPerson.KontaktPersonNummer = Kontaktlog.KontaktPersonNummer) ON Firma.FirmaNummer = KontaktPerson.Firmanummer) ON Saelger.SælgerKode = Kontaktlog.OpfølgendeSælger
WHERE (((Kontaktlog.AftaleDato)<=#09-09-2004#) AND ((Kontaktlog.Opfulgt)=False) AND ((Saelger.UserId)=CurrentUser()));

Men hvis datoen ændres til en dato mellem 01-09-2004 og 08-09-2004 (begge inkl.) så kommer der intent ud.

Og dataene har alle datoer der ligger i august !!!

Mystisk synes jeg.
Avatar billede hekla Nybegynder
19. august 2004 - 21:51 #1
Kan det være fordi 01-09-2004 betyder 1. september 2004 og 01-09-2004 betyder 8. september 2004?
Avatar billede jasman Nybegynder
19. august 2004 - 21:55 #2
Undskyld Hekla ?
Men den er du lige nødt til at køre forbi mig en gang til ;).
Hvordan kan #01-09-2004# betyder 8. september 2004 ?
Avatar billede hekla Nybegynder
19. august 2004 - 22:27 #3
Godt ord igen. Det skulle selvfølgelig være:
08-09-2004 betyder 8. september 2004

:o)
Avatar billede jasman Nybegynder
19. august 2004 - 22:54 #4
Men jeg forstår det altså stadig ikke.

Hvorfor vil den ikke lige kendes ved de datoer (1. til 8.) når alle de andre virker ?

Hvis de data jeg har liggende alle ligger på f.eks.:
16.08.2004
20.08.2004
21.08.2004

og jeg spørger på dato <= #08-09-2004

så ser jeg ingen grund til, at dataene ikke kommer med ud.
20. august 2004 - 09:58 #5
Problemet er formentlig, at så snart du har datoer forbi VBA, så bliver de byttet om til formattet mm-dd-yy (med mindre, at dette give en ugyldig dato, hvorved formattet dd-mm-yy afprøves)
Dvs at 5-9-2004 konsekvent laves om til 9-5-2004 mens 15-9-2004 forbliver korrekt, da der ikke er noget, der hedder 9-15-2004.
Fejlen skyldes at VBA-editoren er hardkodet til at benytte US-standard (tsk tsk tsk, Microsoft)

Ofte (men desværre ikke altid) kan man løse problemet ved at gennemtvinge formattet yyyy-mm-dd. Dvs hver gang man bruger en dato (f.eks i en variabel eller en dato), skriver man:
Format(varDato, "yyyy-mm-dd")

Jeg kunne godt tænke mig at se hvordan din SQL konstrueres.
Hvis datoen hentes fra en felt på en formular, kan du også løse problemet ved at lægge felt-referencen inden i SQL'en.
I stedet for at skrive f.eks. således:

SQLStr = "Select * From Tabel Where Dato = #" & Me!MitDatoFelt & "#"

Så skriv:

SQLStr = "Select * From Tabel Where Dato = Forms!MinFormular!MitDatoFelt"

Men prøv evt at vise os din VB-kode...

/Thomas
Avatar billede jasman Nybegynder
20. august 2004 - 19:38 #6
Det var lige i øjet Thomas.
Tak for det.
En simpel

Format(dato,"mm-dd-yyyy")

også kørte det bare i olie !!!

Jeg takker mange gange.
20. august 2004 - 20:36 #7
jamen, selv tak da :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