P PixelFix Medlem sedan juni 2000 45 inlägg Frågan 20 okt. 2004 18:57 #1 Jag har skapat ett adressregister. Det går utmärkt att lägga till nya poster, visa poster och söka poster. Men när det gäller att uppdatera poster har jag gått bet.
Följande kod visar en specifik post inlagt i ett formulär:
<%
IdNr = TRIM( Request( "pid" ) )
Set Con = Server.CreateObject( "ADODB.Connection" )
Set RS = Server.CreateObject("ADODB.Recordset")
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\dbq\adressbok-klypan.mdb"
SqlString = "SELECT * FROM AdresserPrivat WHERE IdNr=" & IdNr
RS.Open sqlString, Con
%>
<link rel=stylesheet href="mall_1.css" type="text/css">
<form method="post" action="edit_privatadress.asp?pid=<%=RS("IdNr")%>">
<input type="hidden" value="<%=Session( "UserName" )%>" name="ul">
<br>
<a href="visa_privatlista_detalj.asp?pid=<%=RS("IdNr")%>" target="middleframe"><img src="bilder/pil-v.gif" border="0"></a>
<a href="logout.asp" target="middleframe"><img src="bilder/kryss.gif" border="0" alt="Logga ut"></a>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="5">
<b>Ändra adressuppgift</b></td>
</tr>
<tr>
<td>
Förnamn:</td>
<td>
<input name="fornamn" size="25" value="<%=RS( "Fornamn" )%>"></td>
</tr>
<tr>
<td>
Smeknamn:</td>
<td>
<input name="smeknamn" size="25" value="<%=RS( "Smeknamn" )%>"></td>
</tr>
<tr>
<td>
Efternamn:</td>
<td>
<input name="efternamn" size="25" value="<%=RS( "Efternamn" )%>"></td>
</tr>
<tr>
<td>
Adress:</td>
<td>
<input name="Adress" size="25" value="<%=RS( "Adress" )%>"></td>
</tr>
<tr>
<td>
Postadress:</td>
<td>
<input name="postadress" size="25" value="<%=RS( "Postadress" )%>"></td>
</tr>
<tr>
<td>
Tel hem:</td>
<td>
<input name="telhem" size="25" value="<%=RS( "TelHem" )%>"></td>
</tr>
<tr>
<td>
Tel GSM:</td>
<td>
<input name="telgsm" size="25" value="<%=RS( "TelGsm" )%>"></td>
</tr>
<tr>
<td>
Tel arb:</td>
<td>
<input name="telarb" size="25" value="<%=RS( "TelArb" )%>"></td>
</tr>
<tr>
<td>
E-post:</td>
<td>
<input name="epost" size="25" value="<%=RS( "Epost" )%>"></td>
</tr>
<tr>
<td>
Hemsida:</td>
<td>
<input name="hemsida" size="25" value="<%=RS( "Hemsida" )%>"></td>
</tr>
<tr>
<td>
Anteckningar:</td>
<td>
<textarea name="egnanot" rows="4" cols="30"><%=RS( "EgnaNot" )%></textarea></td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="Uppdatera"></td>
</tr>
</table>
</form>
<%
Con.Close
Set Con = Nothing
%>
När jag har gör en ändring i formuläret och klickar på knappen Uppdatera så händer ingenting.
Koden där ändringen ska ske ser ut enligt följande:
<%
FUNCTION fixQuotes( theString )
fixQuotes = REPLACE( theString, "'", "''" )
END FUNCTION
ul = TRIM( Request( "ul" ) )
fornamn = TRIM( Request( "fornamn" ) )
smeknamn = TRIM( Request( "smeknamn" ) )
efternamn = TRIM( Request( "efternamn" ) )
adress = TRIM( Request( "adress" ) )
postadress = TRIM( Request( "postadress" ) )
telhem = TRIM( Request( "telhem" ) )
telgsm = TRIM( Request( "telgsm" ) )
telarb = TRIM( Request( "telarb" ) )
epost = TRIM( Request( "epost" ) )
hemsida = TRIM( Request( "hemsida" ) )
egnanot = TRIM( Request( "egnanot" ) )
If ul = "" THEN
ul = "-"
End If
If fornamn = "" THEN
fornamn = "-"
End If
If smeknamn = "" THEN
smeknamn = "-"
End If
If efternamn = "" THEN
efternamn = "-"
End If
If adress = "" THEN
adress = "-"
End If
If postadress = "" THEN
postadress = "-"
End If
If telhem = "" THEN
telhem = "-"
End If
If telgsm = "" THEN
telgsm = "-"
End If
If telarb = "" THEN
telarb = "-"
End If
If epost = "" THEN
epost = "-"
End If
If hemsida = "" THEN
hemsida = "-"
End If
If egnanot = "" THEN
egnanot = "-"
End If
IF ul <> "" AND fornamn <> "" AND smeknamn <> "" AND efternamn <> "" AND adress <> "" AND postadress <> "" AND telhem <> "" AND telgsm <> "" AND telarb <> "" AND epost <> "" AND hemsida <> "" AND egnanot <> "" THEN
Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\dbq\adressbok-klypan.mdb"
sqlString = "UPDATE AdresserPrivat SET " &_
"ul=' " & fixQuotes( ul ) & " '," &_
"fornamn' " & fixQuotes( fornamn ) & " '," &_
"efternamn=' " & fixQuotes( efternamn ) & " '," &_
"adress' " & fixQuotes( adress ) & " '," &_
"postadress' " & fixQuotes( postadress ) & " '," &_
"telhem' " & fixQuotes( telhem ) & " '," &_
"telgsm' " & fixQuotes( telgsm ) & " '," &_
"telarb' " & fixQuotes( telarb ) & " '," &_
"epost' " & fixQuotes( epost ) & " '," &_
"hemsida' " & fixQuotes( hemsida ) & " '," &_
"egnanot' " & fixQuotes( egnanot ) & " WHERE IdNr=" & IdNr
Con.Execute sqlString
END IF
%>
Kan någon se vad jag gjort för fel eller om jag har glömt något?
L LarsG Medlem sedan dec. 2000 12 464 inlägg Lägg till testutskrifter så att du ser vad som händer
sqlString = "UPDATE AdresserPrivat SET " &_
"ul=' " & fixQuotes( ul ) & " '," &_
"fornamn' " & fixQuotes( fornamn ) & " '," &_
"efternamn=' " & fixQuotes( efternamn ) & " '," &_
"adress' " & fixQuotes( adress ) & " '," &_
"postadress' " & fixQuotes( postadress ) & " '," &_
"telhem' " & fixQuotes( telhem ) & " '," &_
"telgsm' " & fixQuotes( telgsm ) & " '," &_
"telarb' " & fixQuotes( telarb ) & " '," &_
"epost' " & fixQuotes( epost ) & " '," &_
"hemsida' " & fixQuotes( hemsida ) & " '," &_
"egnanot' " & fixQuotes( egnanot ) & " WHERE IdNr=" & IdNr
response.write "SQL>" & SQLString & "<br>"
'Con.Execute sqlString
Sen så kan du ju testa den sql-frågan direkt i Access så att du ser att du får in ett korrekt id-nummer.
'Con.Execute sqlString
P PixelFix Medlem sedan juni 2000 45 inlägg Lade in:
pid = TRIM( Request( "pid" ) )
och ändrade:
WHERE IdNr=" & IdNr
till:
WHERE IdNr=" & pid
Fick efter detta, felmeddelandet:
SQL>UPDATE AdresserPrivat SET ul=' Lazlo714 ',fornamn' Edit ',efternamn=' Editsson ',adress' Edgatan 1 ',postadress' 123 45 EDIT ',telhem' 33333 ',telgsm' 3456 ',telarb' 455667 ',epost' edit@telia.com ',hemsida' https://www.edit.se ',egnanot' Testperson. Gillar att bli editerad. WHERE IdNr=492
ID-nummret i Access är korrekt men det sker ingen uppdatering i databasen. Ser också att en ändring jag gör i mitt ändringsformulär i webbläsaren följer med i felmeddelandet.
L LarsG Medlem sedan dec. 2000 12 464 inlägg Du har glömt ett antal =
sqlString = "UPDATE AdresserPrivat SET " &_
"ul=' " & fixQuotes( ul ) & " '," &_
"fornamn=' " & fixQuotes( fornamn ) & " '," &_
"efternamn=' " & fixQuotes( efternamn ) & " '," &_
"adress=' " & fixQuotes( adress ) & " '," &_
"postadress=' " & fixQuotes( postadress ) & " '," &_
"telhem=' " & fixQuotes( telhem ) & " '," &_
"telgsm=' " & fixQuotes( telgsm ) & " '," &_
"telarb=' " & fixQuotes( telarb ) & " '," &_
"epost=' " & fixQuotes( epost ) & " '," &_
"hemsida=' " & fixQuotes( hemsida ) & " '," &_
"egnanot=' " & fixQuotes( egnanot ) & " WHERE IdNr=" & IdNr
Om du har
ON ERROR RESUME
så måste du kontrollera felkoden efter alla databasanrop.
J.N. Medlem sedan apr. 2003 1 660 inlägg HEJ!
Två frågor:
If egnanot = "" THEN
egnanot = "-"
End If
1. Denna kod har du med några gånger, tar endast plats, och tillför inget mer än ett streck om posten är tom.
Varför inte göra en funktion för detta, eller (bäst) låta fältet vara tomt, och skriva ut strecket när du presenterar datan?
IF ul <> "" AND fornamn ...
2. Varför kontrollerar du om fälten inte är tomma innan du uppdaterar? Det ska de ju inte vara efter ovanstående harang?
P PixelFix Medlem sedan juni 2000 45 inlägg Har tagit bort "harangen" som J.N. frågade om.
Lagt till de saknade likamedtecknen.
Det vill sig ändå inte. :(
P PixelFix Medlem sedan juni 2000 45 inlägg Nu fick jag ett felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression '' Testperson. Gillar att bli editerad. WHERE IdNr=492'.
/edit_privatadress.asp, line 37
Det är något med kolumnen EgnaNot i databasen, men vad?
@nders Medlem sedan juni 2000 32 969 inlägg
Det är något med kolumnen EgnaNot i databasen, men vad?
Nej, inte i databasen, men i SQL-frågan. Du saknar en apostrof efter värdet för egnanot.
Jag förstår dock inte varför du lägger till mellanslag före och efter varje värde i SQL-frågan, men du kanske har någon jättebra anledning till det. ;)
P PixelFix Medlem sedan juni 2000 45 inlägg :birp Tänka sig, en enda apostrof.
Det fungerar klockrent nu. Jag var när att ge upp.
Tackar så hemskt mycket.
Anledningen till de extra mellanslagen är en kvarleva från en kursbok. Har återanvänt mycket kod. Har inte brytt mig om att ta bort dessa mellanslag för det har ju fungerat.