Avatar billede macriis Nybegynder
07. august 2003 - 23:13 Der er 11 kommentarer og
1 løsning

Dato i en SQL-sætning

Hej alle
Jeg kan simpelthen ikke få nedenstående SQL-sætning til at udskrive noget som helst. hvorfor?
Der bruges en Access data.



strSQL = "SELECT kundeId, kundenavn, kontaktperson, telefonnr, dato FROM kunde WHERE dato = #" & Request.QueryString("dato") & "#"
Set rsKunde = Conn.Execute(strSQL)

Jeg har forsøgt følgende, som netop udskriver korrekt, men den er ikke dynamisk nok.



strSQL = "SELECT kundeId, kundenavn, kontaktperson, telefonnr, dato FROM kunde WHERE dato = '07-08-2003'"
Set rsKunde = Conn.Execute(strSQL)

Har også forsøgt at skrive



... WHERE dato = '#" & Request.QueryString("dato") & "#'" ...

men uden held.

Jeg bruger:



DO UNTIL rsKunde.EOF
Response.Write "<tr><td nowrap><strong><a href='redigerKunde.asp?id=" & rsKunde("kundeId") & "'>" & rsKunde("kundenavn") & "</a><strong></td><td width='20'></td><td nowrap>" & rsKunde("kontaktperson") & "</td><td nowrap>" & rsKunde("telefonnr") & "</td></tr>"
rsKunde.Movenext
LOOP

til at udskrive.
Hvad er der galt?
Avatar billede medions Nybegynder
07. august 2003 - 23:15 #1
Får du nogen fejl?

Prøv evt. at gøre sådan her;

strSQL = "SELECT kundeId, kundenavn, kontaktperson, telefonnr, [dato] FROM kunde WHERE [dato] = #" & CDate(Request.QueryString("dato")) & "#"
Set rsKunde = Conn.Execute(strSQL)

//>Rune
Avatar billede macriis Nybegynder
07. august 2003 - 23:33 #2
dato er ikke et reserveret ord.

Jeg har nu forsøgt mig med:

strSQL = "SELECT kundeId, kundenavn, kontaktperson, telefonnr, dato FROM kunde WHERE dato = '" & Request.QueryString("dato") & "'"

og det virker, men kun på dags dato. Hvis jeg kalder siden med dato=08-08-2003 udskrives der intet (der eksisterer dato for 08-08-2003 i db)
Men benytter jeg følgende SQL virker det, men den er ikke dynamisk....

strSQL = "SELECT kundeId, kundenavn, kontaktperson, telefonnr, dato FROM kunde WHERE dato = '08-08-2003'"

Hvor er forskellen?
Avatar billede eagleeye Praktikant
07. august 2003 - 23:37 #3
Det er fodi SQL bruger US/UK dato format, som er yyyy-mm-dd eller mm-dd-yyyy. Så den vil bytte rundt på månede og dag set i forhold til DK dato format.

SQL bruger US/UK format også selvom du køre med DK format på serveren og i selv databasen. Så man er nød til at formatere sine datoer til en af de to når man skal bruge dem via SQL.
Avatar billede macriis Nybegynder
07. august 2003 - 23:52 #4
Det kan godt være at der er noget om snakke, men det er ikke det der er problemet her, og iøvrigt vel egentlig ikke det jeg spørger om. Når db'en indeholder et felt med en dato hvori der står 08-08-2003, så må

'" & Request.QueryString("dato") & "'"

vel give det samme resultat som

'08-08-2003'

Og det ser ud til at problemet faktisk er cachen i Explorer, der gør det. Men hvis eagleeye kan forklare hvordan man i f.eks. global.asa kan sætte datoformatet for alle sider, eller lign., så skal du få pointene.
Avatar billede eagleeye Praktikant
07. august 2003 - 23:56 #5
Hvilken type er din kolonne dato ??

du skal sætte dato format ved at sætte Session.LCID

<%
Session.LCID = 1030 'DK dato format
%>
Avatar billede macriis Nybegynder
08. august 2003 - 00:00 #6
Kolonne dato i Access er tekst.

Kan du specificere hvad den gør? Kan jeg fx ved at bruge dit forslag med Session.LCID = 1030 øverst på min side bruge mit site på Accessdatabaser og IIS'ere ligegyldigt hvilket sprog de kører?
Avatar billede eagleeye Praktikant
08. august 2003 - 00:03 #7
Ok hvis det er en tekst kolonne skal du bare kunne skrive det samme som der står i databasen og så skal man sætte ' omkring i SQLen.

Session.LCID ændre på servren dato format opsætning. De fleste web-hoteller køre med DK dato format. Hvis man vil køre et andet dot format end det som default er for serveren kan man bruge Session.LCID til at ændre det.

Men hvis det er en tekst kolonne er det ligemeget hvad LCID er sat til så skal den udksrive det som det står i databasen.
Avatar billede macriis Nybegynder
08. august 2003 - 00:14 #8
Ok.

Har jeg ret i at udtrækket i datobasen så er en streng og ikke en dato?
Hvad så hvis man vil lægge 1 dag til datoen (strengen) som i Data + 1?
Avatar billede eagleeye Praktikant
08. august 2003 - 00:19 #9
Ja det er en streng du får fra databasen.

Så hvis du vil ligge 1 til er du nød til at bruge DateAdd

dato = DateAdd("d",1,dato)

Eller konvertere til date variable med CDate

dato = CDate(dato)+1

men når man bruger dato funktionerne DateAdd og CDate så bruger de det dato format som er angivet i LCID.
Avatar billede macriis Nybegynder
08. august 2003 - 00:22 #10
Ok. Jeg siger mange tak for hjælpen. Så er der lidt at arbejdet med.
Avatar billede macriis Nybegynder
08. august 2003 - 00:27 #11
Er standardformatet for Session.LCID = 1030 altid DD-MM-YYYY?
Avatar billede eagleeye Praktikant
08. august 2003 - 00:29 #12
Ja det er det.
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