webForumDet fria alternativet

Hur uppdatera databasen?

ASPur ASP

8 svar · 371 visningar · startad av PixelFix

Medlem sedan juni 200045 inlägg
Frågan#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>
			&nbsp;</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?

Medlem sedan dec. 200012 464 inlägg
#2

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

Medlem sedan juni 200045 inlägg
#3

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.

Medlem sedan dec. 200012 464 inlägg
#4

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.

Medlem sedan apr. 20031 660 inlägg
#5

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?

Medlem sedan juni 200045 inlägg
#6

Har tagit bort "harangen" som J.N. frågade om.
Lagt till de saknade likamedtecknen.
Det vill sig ändå inte. :(

Medlem sedan juni 200045 inlägg
#7

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?

Medlem sedan juni 200032 969 inlägg
#8

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. ;)

Medlem sedan juni 200045 inlägg
#9

: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.

143 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)