webForumDet fria alternativet

Knepigt me duppdate eller insert.

ASPur ASP

4 svar · 391 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag har en tabell, t_forening, som innehåller lite standard fält.
Jag har en tabell till, t_Pref, som har relation via portId och Id, där det finns
två ja/nej-fält.

Jag har inga problem om bägge fälten skall vara ifyllda, men om bara den ena,
eller bägge är ofyllda, då får jag ett error. Jag vet att jag tänker fel men
jag kan inte komma på hur jag skall göra detta smidigt.

sKlient=Request("Klient")
	if LEN(sKlient)=0 then
		sKlient=False
	End IF

	sHaveURL=Request("HaveURL")
	if LEN(sHaveURL)=0 then
		sHaveURL=False
	End IF

SQL ="SELECT Id FROM t_Pref WHERE Id =" & Request("ID")
	SET RS=Connection.Execute(SQL)
		IF RS.EOF THEN

SQL = "INSERT INTO t_Pref(Id,Klient,HaveURL) VALUES (" &Request("ID")& "," 
&Request("Klient")& "," &Request("HaveURL")& ")" '& " " & ")"
			Connection.Execute(SQL)
		ELSE
SQL = "Update t_Pref "
SQL = SQL & " Set Klient =" &sKlient& ",HaveURL=" &sHaveURL& " WHERE Id 
= " & RS("ID")
			Connection.Execute(SQL)
		END IF

OBS jag har inte brytt mig om SQLInjection ännu, det kommer...

Medlem sedan mars 20011 880 inlägg
#2

Hur jag än gör, så blir det galet, och därför försöker jag nu på ett annat sätt.
Det är inget bra sätt, det blir mer databasanrop än vad som var meningen.

'jag lägger först in ett id med en insert
SQL = "INSERT INTO t_Pref (Id) VALUES (" &RS("portId")& ")"
Connection.Execute(SQL)

'sen tar jag varje fält för sig via en sub
CALL UppdateRec("Klient",Request("Klient"),RS("portId"),"ja/nej")
CALL UppdateRec("HaveURL",Request("HaveURL"),RS("portId"),"ja/nej")
CALL UppdateRec("Free",Request("Free"),RS("portId"),"ja/nej")
CALL UppdateRec("EpostSend",Request("EpostSend"),RS("portId"),"ja/nej")
CALL UppdateRec("Desc",Request("Desc"),RS("portId"),"sText")

'subben ser ut så här

Sub UppdateRec(fName,reqName,sId,typ)
on error resume next
if LEN(reqName)>0 then
SELECT CASE typ
CASE "sText"
SQL="Update t_Pref SET " &fName& " = '" &reqName& "' WHERE Id = " &sId
CASE "tal","ja/nej"
SQL="Update t_Pref SET " &fName& " = " &reqName& " WHERE Id = " &sId
END SELECT
connection.Execute(SQL),intRecEff,128
End Sub

Ny fungerar nästan allt utom när jag skall lägga till text i Desc, där det är
tänkt att det skulle fixa sig i SELECT CASE.
Jag får följande error:

Error #-2147217900
Error desc. -> Syntaxfel i UPDATE-uttryck.
'Utskrivna SQLer ser ut så här:
Update t_Pref SET HaveURL = True WHERE Id = 74
Update t_Pref SET EpostSend = True WHERE Id = 74
Update t_Pref SET Desc = 'sdf' WHERE Id = 74
Database Errors Occured
Error #-2147217900
Error desc. -> Syntaxfel i UPDATE-uttryck.

JAg kan inte se något fel så jag vore väldigt tacksam för lite hjälp...

Medlem sedan juni 200032 967 inlägg
#3

Desc är ett reserverat ord. (sorteringsordning, du vet.)
Byt namn på fältet.

Medlem sedan mars 20011 880 inlägg
#4

Hej, jag kom på det sedan, men måste man göra det så här tokigt?

Medlem sedan juni 200032 967 inlägg
#5

Nej, du kan använda din första kod med lite förändringar.

  1. I ASP-koden ska du skriva de booleska värdena som strängar, dvs "False" istället för False.
  2. Använd variablerna du sätter, inte direkt request i sql-frågan, både i insert och update. Använder du request direkt där spelar det ju ingen som helst roll att du sätter variabler först.
133 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)