24. april 2003 - 12:42Der er
24 kommentarer og 1 løsning
Opdatere i en access-database
Hej...
Jeg har følgende ASP kode på min hjemmeside. Formålet med det er, at hvis brugeren indtaster et nummer i feltet "Ktrlnr" og en email i feltet "Email" der stemmer overens med felterne i databasen, så skal der ændres på to parametre i databasen: Feltet Aktiv skal ændres fra Yes til No, og i feltet Inaktiveringsdato skal dags dato indsættes.
Men lortet virker ikke!
<% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/db/annoncer.mdb") Conn.Open DSN
'Laver en søgning efter dataene i databasen SQL = "Select * From koeb WHERE Kontrolnummer='" & Request.Form("Ktrlnr") & "' AND Indsender-email='" & Request.Form("Email") & "'" Set rs = Conn.Execute(SQL)
If NOT (rs.BOF OR rs.EOF) Then If Request.Form("Ktrlnr") <> "" AND Request.Form("Email") <> "" Then ' SQL sætning opbygges strSQL = "Update koeb set " strSQL = strSQL & "Aktiv= 'No', " strSQL = strSQL & "Inaktiveringsdato= '" & Date & " ," strSQL = strSQL & "WHERE Kontrolnummer='" & Request.Form("Ktrlnr") & "' AND Indsender-email='" & Request.Form("Email") & "'"
' SQL sætning eksekveres Conn.Execute(strSQL)
End IF End IF
' Luk databaseforbindelse Conn.Close Set Conn = Nothing %>
Jeg får denne fejlmeddelelse: Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.
Ja du har ret, men fejlen var du løbet ind i som det næste ;-) Jeg kan ikke se der nogen syntaxfejl. Prøv og rename Indsender-email til Indsenderemail i databasen.
din dato skal, hvis det er et datofelt, se således ud 20032404. Hvad med kontrolnummer er det et tekstfelt eller talfelt? tjek alle felterne om typerne er det du tror de er.
Function ConvertToSqlDate(dato) dim SQLYear,SQLMonth,SQLDay SQLYear = Year(dato) SQLMonth = Month(dato) SQLDay = Day(dato) if SQLDay<10 then SQLDay = 0&SQLDay end if if SQLMonth<10 then SQLMonth = 0&SQLMonth end if ConvertToSqlDate = SQLYear&SQLMonth&SQLDay End Function
Jeg får stadig den der "Data type mismatch in criteria expression" fejlmeddelelse...
Det hele som det ser ud nu: <% Function ConvertToSqlDate(dato) dim SQLYear,SQLMonth,SQLDay SQLYear = Year(dato) SQLMonth = Month(dato) SQLDay = Day(dato) if SQLDay<10 then SQLDay = 0&SQLDay end if if SQLMonth<10 then SQLMonth = 0&SQLMonth end if ConvertToSqlDate = SQLYear&SQLMonth&SQLDay End Function ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/db/annoncer.mdb") Conn.Open DSN
'Laver en søgning efter dataene i databasen SQL = "Select * From koeb WHERE Kontrolnummer='" & Request.Form("Ktrlnr") & "' AND Indsenderemail='" & Request.Form("Email") & "'" Set rs = Conn.Execute(SQL)
If NOT (rs.BOF OR rs.EOF) Then If Request.Form("Ktrlnr") <> "" AND Request.Form("Email") <> "" Then ' SQL sætning opbygges strSQL = "Update koeb set " strSQL = strSQL & "Aktiv= 'No', " strSQL = strSQL & "Inaktiveringsdato= '" & ConvertToSqlDate(date) & "'" strSQL = strSQL & "WHERE Kontrolnummer= '" & Request.Form("Ktrlnr") & "' AND Indsenderemail='" & Request.Form("Email") & "'"
' SQL sætning eksekveres Conn.Execute(strSQL)
End IF End IF
' Luk databaseforbindelse Conn.Close Set Conn = Nothing %>
Det færdige resultat blev: <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/db/annoncer.mdb") Conn.Open DSN
'Laver en søgning efter dataene i databasen SQL = "Select * From koeb WHERE Kontrolnummer='" & Request.Form("Ktrlnr") & "' AND Indsenderemail='" & Request.Form("Email") & "'" Set rs = Conn.Execute(SQL)
If NOT (rs.BOF OR rs.EOF) Then If Request.Form("Ktrlnr") <> "" AND Request.Form("Email") <> "" Then ' SQL sætning opbygges strSQL = "Update koeb set " strSQL = strSQL & "Aktiv= No, " strSQL = strSQL & "Inaktiveringsdato= '" & Date & "'" strSQL = strSQL & "WHERE Kontrolnummer= '" & Request.Form("Ktrlnr") & "' AND Indsenderemail='" & Request.Form("Email") & "'"
' SQL sætning eksekveres Conn.Execute(strSQL)
End IF End IF
' Luk databaseforbindelse Conn.Close Set Conn = Nothing %>
Det eneste der var galt (udover den ene komma-fejl) var apostrofferne rundt om 'No' Nu er de fjernet og det kører som smurt (og den kan sagtens klare datoformat som 24-04-2003).....
:oD
Synes godt om
Ny brugerNybegynder
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.