webForumDet fria alternativet

bara update på valda

ASP

11 svar · 357 visningar · startad av jns

Medlem sedan dec. 2001132 inlägg
Frågan#1

Fridens!
Jag har stött på ett problem som jag inte klarar att kliva över.

Jag ska nämligen uppdatera en post i en databas men vill inte ändra på de fält som inte ska ändras, alltså om en input ruta lämnas tom.
Men jag kommer inte på hur jag ska få till den funktionen utan att behöva skriva 49 stycken update strängar.

Så här ser koden ut nu:

nID = "'" & replace(request.form("id"),"'","''") & "'"
nSignature = "'" & replace(request.form("signature"),"'","''") & "'"
nPwd = "'" & replace(request.form("pwd"),"'","''") & "'"
nComments = "'" & replace(request.form("comments"),"'","''") & "'"
nDelete = request.form("delete")
nModify = request.form("modify")
nUsers = request.form("users")
nModpassword =request.form("modpassword")

updatera = "UPDATE login SET Signature = " & nSignature & ", pwd = " & nPwd & ", Comments = " & nComments & ", delete = " & nDelete & ", Modify = " & nModify & ", users = " & nUsers & ", modpassword = " & nModpassword & " WHERE ID = " & nID

set mincon =Server.CreateObject("ADODB.Connection")

mincon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\jeha\ukm\db\main.mdb")

mincon.execute updatera,rowsaffected,128

Men självklart så godtar den inte min update-sträng, får detta felmeddelande:

Microsoft JET Database Engine (0x80040E14)
Syntax error in UPDATE statement.
Medlem sedan apr. 20022 743 inlägg
#2

Har du skrivit ut och kontrollerat så SQL-satsen är korrekt?

Medlem sedan mars 20023 561 inlägg
#3

Antar att ID är av typen integer i databasen. Då ska det inte vara ' runt värdet.

Medlem sedan dec. 2001132 inlägg
#4

Tack, så långt fungerar det, men den fungerar fortfarande inte när man inte fyller i alla fält

Medlem sedan dec. 200012 464 inlägg
#5

Yikes, inte kan du ha en kolumn som heter delete. Modify är inte så bra heller.

Medlem sedan dec. 2001132 inlägg
#6

Jasså? Hur många sådanna där farliga namn finns det egentligen?
Alla verkar ju vara "tagna".

Medlem sedan mars 20023 561 inlägg
#7

jns skrev:

Jasså? Hur många sådanna där farliga namn finns det egentligen?
Alla verkar ju vara "tagna".

Här är en lista för MySQL:http://dev.mysql.com/doc/mysql/en/reserved-words.html

Medlem sedan nov. 20017 144 inlägg
#8

jns skrev:

Jasså? Hur många sådanna där farliga namn finns det egentligen?
Alla verkar ju vara "tagna".

Det är kanske lite överdrivet, men en teknik att få detta ideotsäkert är att innan kolumnnamnet sätta tabellens initial med ett underscore.

ex. UPDATE tbl SET t_update=1, t_modify='Hej' WHERE t_id=3

Medlem sedan dec. 2001132 inlägg
#9

Ah, det var att bra tips. Tack
Fortfarande ingen som har nått svar på min första fråga?

Medlem sedan nov. 20017 144 inlägg
#10

49 stycken update strängar

Vad får du 49 ifrån?
Vad är det du vill uppnå, jag fattar i a f inte. :)

Medlem sedan okt. 2004502 inlägg
#11

Du måste kolla de värden du får och generera frågan utifrån det. Exempelvis


uppdatera = "UPDATE login SET "

If Len(nSignature)>0 Then
   uppdatera=uppdatera & " Signature = " & nSignature & "
End If
If Len(nPwd)>0 Then
   If Len(uppdatera)>18 Then
      uppdatera=uppdatara & ","
   End If
   uppdatera=uppdatera & " pwd = " & nPwd
End If
etc...

uppdatera = uppdatera & " WHERE ID = " & nID

Störde mig på stavfelet av "uppdatera" och har korrigerat stavningen.

Medlem sedan apr. 20031 660 inlägg
#12

Re: bara update på valda

HEJ!

jns skrev:

...Jag ska nämligen uppdatera en post i en databas men vill inte ändra på de fält som inte ska ändras, alltså om en input ruta lämnas tom...

Varför vill du inte uppdatera värden i samma post som inte ändras?

Visserligen kanske det känns onödigt att uppdatera något som inte ändrats, men tänk på tiden det tar att göra en dynamisk update som jämför gammalt med nytt...
med 49 poster...

260 ms totalt · 4 externa anrop · v20260731065814-full.20824b9f
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)