Avatar billede MrJ Praktikant
01. september 2005 - 14:00 Der er 12 kommentarer og
2 løsninger

Dato og Access problemer

Hej
Jeg er lige gået i gang med at lave et ASP script, og tænkte at jeg for første gang ville prøve at bruge dato/klokkeslæt feltet i Access i stedet for tekst type.

Mit problem er at jeg ikke kan lave en SQL query der søger på datoen.

Mit script ser således  ud:
<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("callcenter.mdb")
Conn.Open DSN

dim dato

dato = FormatDateTime(Now, vbShortDate)

    sql = "SELECT * FROM cc_vagter WHERE TRIN = 1 AND dato = 01-09-2005" '01-09-2005 er den dato som lægger i variablen dato. Jeg skriver den bare manuelt for at vise hvordan formatet ser ud

    Set rs = Conn.Execute(sql)

    Response.Write "<BR>" & rs("dato") & " " & rs("init1") & " " & rs("init2") & " " & rs("init3") & "<br>"
           

%>

Jeg får følgende fejl når jeg kører:
Fejltype:
(0x80020009)
Undtagelse opstod.
/callcenter/Default.asp, line 15


linje 15 er den linje hvor jeg udskriver resultatet



Er der nogen der kan forklare mig hvad der er i vejen med scriptet? Jeg har tjekket at feltet i databasen er sat til dato.
Avatar billede kalp Novice
01. september 2005 - 14:02 #1
sql = "SELECT * FROM cc_vagter WHERE TRIN = 1 AND dato = #01-09-2005#"

prøv sådan
Avatar billede kalp Novice
01. september 2005 - 14:03 #2
hmm.. okay hjælper måske ikke så meget..
Avatar billede softspot Forsker
01. september 2005 - 15:04 #3
Det er fordi dit resultat ikke indeholder et af de felter du prøver at hente.

Prøv evt at udskrive alle feltnavne i dit recordset:

for each fld in rs.fields
  Response.Write(fld.name & "<br>")
next

...og se om det du forventer rent faktisk findes.

Alternativt: kig i tabellen i databasen ;)
Avatar billede MrJ Praktikant
01. september 2005 - 15:20 #4
softspot> jeg har lige prøvet din kode, og den udskrriver følgende:
id
dato
init1
init2
init3
trin

Så feltet dato er der.
Det skal lige siges at i min kode hvor der står TRIN = 1, der har jeg rettet det til trin = 1, da det feltnavnet står med småt.

Det er vel ikke pga. at dato formatet ikke passer med Access vel? Jeg bruger både den danske version af Windows og Access, så jeg regner med at formatet skal være dansk
Avatar billede softspot Forsker
01. september 2005 - 15:28 #5
Er du sikker på at recordsettet indeholder nogle rækker (selvom jeg ville forvente en anden fejl i det tilfælde at det var tom)?

Check altid med

if not rs.EOF then

inden du aflæser recordsets - det kunne være der ikke var data i :)
Avatar billede MrJ Praktikant
01. september 2005 - 15:38 #6
du har ret i at der ikke returneres en række.
Hvis jeg skriver den samme sql sætning i Access, returneres også 0 rækker..

Jeg forstår bare ikke hvorfor. For jeg har lige nu 2 rækker i tabellen, og jeg kan se at der står 01/09/2005 i den ene række i feltet dato.
Jeg har også prøvet at lave et format i dato feltet så der skal stå dd/mm/åååå (jeg har set at ændre eksempler bruger / i stedet for -, som seperator). Så der er ikke nogen tegn der ikke burde være der.

Det er sikkert bare mig, der ikke kan finde ud af at bruge felt typen dato... men jeg kan bare ikke se hvad jeg gør forkert
Avatar billede softspot Forsker
01. september 2005 - 15:42 #7
Jeg tror kalp var inde på noget af det rigtige ifht. at benytte datoformatet i SQL-sætninger. Prøv at bruge det format kalp har vist til at forespørge med...

Hvordan datoer bliver formatteret i Access er irrelevant for data, det er bare til præsentation i Access GUI.
Avatar billede MrJ Praktikant
01. september 2005 - 15:47 #8
jeg har faktisk også lige fundet ud af at Access bruger engelsk dato sæt..
I Access forespørgelse virker følgende:

SELECT *
FROM cc_vagter
WHERE (((cc_vagter.dato)=#9/1/2005#));

Når jeg prøvet at skrive det i ASP, skriver jeg følgende:
sql = "SELECT * FROM cc_vagter WHERE dato =#9/1/2005#"

Så kommer følgende fejl:
ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
Avatar billede softspot Forsker
01. september 2005 - 15:52 #9
Hvis du vil være nogenlunde sikker på at datoformatet ikke giver problemer, så skal du bruge formatet yyyy-mm-dd i dine forspørgsler.

Desuden kan du måske vinde noget ved at sætte

Session.LCID = 1030

som (såvidt jeg husker) skifter til danske regional settings i din session. Det kan også have indvirkning på hvordan ADO fortolker de dato'er du sender igennem...
Avatar billede MrJ Praktikant
01. september 2005 - 15:58 #10
ok. jeg har sgu fået det til at virke nu. Jeg sad og dummede mig lidt, fordi at jeg har omdøbt dato feltet, for at se om det var navnet dato der ødelagde det. Så det var ikke fordi at der var # i datoen :)

Nu kan jeg godt selv klare det med at skrive yyyy-mm-dd (som jeg også prøvede heeeelt i starten, inden at jeg spurgte om hjælp her :)

Tak for hjælpen til jer begge to. I må dele point da i begge har hjulpet mig
Avatar billede MrJ Praktikant
01. september 2005 - 15:58 #11
i skal dog lægge et svar først! :)
Avatar billede softspot Forsker
01. september 2005 - 16:02 #12
Godt du kom igennem :)
Avatar billede kalp Novice
01. september 2005 - 19:13 #13
Har været på arbejde derfor jeg først skriver igen nu:)

godt problemet blev løst:)
Avatar billede softspot Forsker
06. september 2005 - 16:49 #14
Tak for point :)
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
Kurser inden for grundlæggende programmering

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