09. januar 2009 - 15:19Der er
21 kommentarer og 1 løsning
Dato i sql statement
Hej
Jeg har følgende : strSQL = "SELECT * FROM [log] where dato=" & request.querystring("dato") &" order by tid" Set rs = Conn.Execute(strSQL)
Det er access
En response.write strsql giver: SELECT * FROM [log] where dato=07-01-2009 order by tid
Men alle mine rs("") er tomme. Den skriver intet. Jeg mistænker dato forespørgslen. Når jeg selv kigger i access står datoen på samme måde altså fx 07-01-2009. I access er feltet dato af typen dato/tid og kort datoformat.
Men som Arne foreslår, er jeg da også mere tilhænger af command-objektet og parameterløsningen.
set cmd = Server.CreateObject("ADODB.Command") set cmd.ActiveConnection = Conn cmd.CommandText = strSQL cmd.Parameters.Append cmd.CreateParameter("@dato", adDate, adParamInput, 8, Request.QueryString("dato")) set rs = cmd.Execute()
Se min artikel om samme emne, for detaljer om forudsætningerne for brugen af command-objektet som jeg illustrer overnfor: http://www.eksperten.dk/artikler/1250
Arne> Din sætning giver: SELECT * FROM [log] where dato='04-01-2009' order by tid Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/logdato.asp, line 25
jensgram > Jeg tjekker jo om du har en rigtig session variabel inden fu får lov at udstede en SQL så er det vel ikke så farligt eller hvad? Jeg er på ingen måde programmeringshaj. Bare en amatør der laver noget til mig selv :)
Softspot > Jeg forstår umiddelbart intet af det du skriver om parametre :S strSQL = "SELECT * FROM [log] where dato=#" & request.querystring("dato") &"# order by tid" Set rs = Conn.Execute(strSQL) giver: SELECT * FROM [log] where dato=#04-01-2009# order by tid
Men stadig ingen resultater...felterne er stadig tomme
jensgram > Altså nu er der selvfølgelig flere der kan se siden, men kun når man er logget ind (via noget session tjek) kan man se logs og dermed bruge denne sql sætning. Er det ikke sikkert nok så? Det er kun mig der kan logge ind!
arne_v > Du har ret, jeg prøvede manuelt i linket at bytte om på DDMM til MMDD og så virkede det. Men hvis jeg kigger i basen via access så står det også DDMM. Men laver den det om på et eller andet tidspunkt? Og hvad gør jeg?
Nå nu har jeg forsøgt med din kode softspot. <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("team-emilie.mdb") Conn.Open DSN
'strSQL = "SELECT * FROM [log] where dato=#" & request.querystring("dato") &"# order by tid" 'strSQL = "SELECT * FROM [log] where dato='" & request.querystring("dato") &"' order by tid" 'strSQL = "SELECT * FROM [log] where dato=#" & request.querystring("dato") &"# order by tid" 'response.write strsql 'strSQL1 = "SELECT count(*) as antal FROM [log] where dato=" & request.querystring("dato")
strSQL = "SELECT * FROM [log] WHERE dato=? ORDER BY tid" set cmd = Server.CreateObject("ADODB.Command") set cmd.ActiveConnection = Conn cmd.CommandText = strSQL cmd.Parameters.Append cmd.CreateParameter("@dato", adDate, adParamInput, 8, Request.QueryString("dato")) set rs = cmd.Execute()
%>
Men det giver en fejl. Jeg kan nok ikke forstå at sætte det ind i min kode. Kan I hjælpe?
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.