Avatar billede kkd Nybegynder
24. april 2003 - 12:42 Der 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.

/annonce/annoncefjernkoeb-asp.asp, line 20

linie 20: Set rs = Conn.Execute(SQL)
Avatar billede cesil Nybegynder
24. april 2003 - 12:45 #1
prøv lige

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
Avatar billede hossein Nybegynder
24. april 2003 - 12:53 #2
SQL = "Select * From koeb WHERE Kontrolnummer='" & Request.Form("Ktrlnr") & "' AND Indsender-email='" & Request.Form("Email") & "'"

hvad er Ktrlnr's datatype?
Avatar billede kkd Nybegynder
24. april 2003 - 12:55 #3
Jeg får den samme fejlmeddelelse. Linie 20 er jo også "før" dine ændringer.
Avatar billede kkd Nybegynder
24. april 2003 - 12:57 #4
Kontrolnummer er af typen Yes/No
Ktrlnr er navnet på formfeltet, mens Kontrolnummer er navnet på feltet i databasen
Avatar billede kkd Nybegynder
24. april 2003 - 12:58 #5
Sikke noget vrøvl....
Kontrolnummer er af typen Text
Avatar billede cesil Nybegynder
24. april 2003 - 13:01 #6
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.
Avatar billede kkd Nybegynder
24. april 2003 - 13:07 #7
Nu er der en ny fejlmeddelelse:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement.

/annonce/annoncefjernkoeb-asp.asp, line 31

Linie 31: Conn.Execute(strSQL)
Avatar billede cesil Nybegynder
24. april 2003 - 13:11 #8
fyr lige de her linier af:

response.write strsql
response.end

ligen inden linien
' SQL sætning eksekveres

og skriv hvad den skriver
Avatar billede kkd Nybegynder
24. april 2003 - 13:19 #9
Update koeb set Aktiv= 'No', Inaktiveringsdato= '24-04-2003' ,WHERE Kontrolnummer='654321' AND Indsenderemail='email@mail.dk'
Avatar billede cesil Nybegynder
24. april 2003 - 13:26 #10
der var et komma for meget i den her linie
strSQL = strSQL & "Inaktiveringsdato= '" & Date & "'"
Avatar billede kkd Nybegynder
24. april 2003 - 13:31 #11
Nu siger den:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/annonce/annoncefjernkoeb-asp.asp, line 31

De indtastede data er de samme som dem der står i databasen!
Avatar billede cesil Nybegynder
24. april 2003 - 13:36 #12
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.
Avatar billede kkd Nybegynder
24. april 2003 - 13:37 #13
Aktiv's datatype er Yes/No i databasen. Den er sat til Yes og skal ændres til No, gør det noget, at den allerede har en værdi 'Yes'?
Avatar billede kkd Nybegynder
24. april 2003 - 13:45 #14
Kontrolnummer er text (se ovenfor) :oD
Avatar billede cesil Nybegynder
24. april 2003 - 13:48 #15
næ skulle ikke ha noget og sige.

prøv istedet
Aktiv=0

ellers ved jeg sgu snart ikke. Det må være noget med typerne på dine felter der ikke stemmer overens med inputtet.
Avatar billede kkd Nybegynder
24. april 2003 - 13:50 #16
Hvad mener du, med at dato (som er et date/time felt, med Long Date format) skal se sådan ud?

Indtaster jeg manuelt datoen som den står i SQL-sætningen (24-04-2003) bliver den korrekt vist som "24 april 2003".
Avatar billede cesil Nybegynder
24. april 2003 - 13:54 #17
ja, men når du arbejder med datoer fra din asp side skal formattet være 20042404 ellers får du fejl.

kør din dato gennem den her funktion

strSQL = strSQL & "Inaktiveringsdato= '" & Date = ConvertToSqlDate(date) & "' ,"


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
Avatar billede cesil Nybegynder
24. april 2003 - 13:54 #18
sludder
strSQL = strSQL & "Inaktiveringsdato= '" & ConvertToSqlDate(date) & "' ,"
Avatar billede kkd Nybegynder
24. april 2003 - 13:56 #19
Hvor skal hele Function-delen sættes ind i koden?
Avatar billede cesil Nybegynder
24. april 2003 - 13:58 #20
bare smid den øverst på siden
Avatar billede kkd Nybegynder
24. april 2003 - 14:17 #21
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
%>
Avatar billede cesil Nybegynder
24. april 2003 - 14:20 #22
prøv lige det her igen

fyr lige de her linier af:

response.write strsql
response.end

ligen inden linien
' SQL sætning eksekveres

og skriv hvad den skriver
Avatar billede kkd Nybegynder
24. april 2003 - 14:24 #23
Update koeb set Aktiv= 'No', Inaktiveringsdato= '20030424'WHERE Kontrolnummer= '654321' AND Indsenderemail='kkdahl@mail.dk'
Avatar billede kkd Nybegynder
24. april 2003 - 14:51 #24
Nu virker det endeligt, jeg har måttet lave en smule om, men du får i hvert fald pointene!
Tusind tak for hjælpen!

/kkd :oD
Avatar billede kkd Nybegynder
24. april 2003 - 15:04 #25
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
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