webForumDet fria alternativet

Typblandningsfel i villkorsuttryck.

ASP

16 svar · 449 visningar · startad av josuason

Medlem sedan nov. 200221 inlägg
Frågan#1

Har sökt efter andra trådar men inte hittat samma fel.

Detta händer när jag ändrar på information från databasen på adminsidan och updaterar. Det konstiga är att detta händer bara på vissa id inte alla data som ska ändras på.

Feltyp:
Microsoft JET Database Engine (0x80040E07)
Typblandningsfel i villkorsuttryck.

Är det någon som känner igen detta.

Ziggy

Medlem sedan dec. 200012 464 inlägg
#2

Visa den sqlkod som ger upphov till felet. Helst före och efter det att du har substituerat in värden.

Medlem sedan nov. 200221 inlägg
#3

Från utför sidan

\<%
id	= request.form("id")
alder	= request.form("alder")
alder2	= request.form("alder2")
dag	= request.form("dag")
tider	= request.form("tider")
larare	= request.form("larare")

response.write "Följande information skickas till databasen: "
response.write tider

alder	= "'" & alder & "'"
alder2	= "'" & alder2 & "'"
dag	= "'" & dag & "'"
tider	= "'" & tider & "'"
larare	= "'" & larare & "'"

sql = "update kurstider set"
sql = sql & " alder="	& alder & ", "
sql = sql & " alder2="& alder2 & ", "
sql = sql & " dag="	& dag & ", "
sql = sql & " tider="	& tider & ", "
sql = sql & " larare="& larare 
sql = sql & " where id=" & id

conn.execute(sql)

%>

Det konstiga är att vissa kurser går igenom men andra inte...

Medlem sedan mars 20023 561 inlägg
#4

Enligt felmeddelandet borde det ju vara så att du försöker skicka in fel typ av data i databasen.

PS! Använd gärna [kod]-taggarna när du postar kod.

Medlem sedan nov. 200221 inlägg
#5

Jag kom på att det händer bara när ett av fälten lämnas tomt vid updatering. Hur kan man undvika det?..

Medlem sedan nov. 200013 890 inlägg
#6

Du använder Access eller?
Då kan du gå in i designläge och ändra fältet "Obligatorisk" till "Nej" och "Tillåt nolllängd" till "Ja".

Medlem sedan nov. 200221 inlägg
#7

Jag kollade det Web-Tor men värdet är av Datatypen Tal och jag har valt Nej i fältet obligatorisk. Men den har inte "Tillåt nolllängd"
... Vad ska jag göra då??

Medlem sedan dec. 20003 887 inlägg
#8

Tillåt nollängd: Ja (eller fungerade inte det :q)

Eller så kan du ju testa om värdet finns, när du skapar sql-frågan.

sql = "UPDATE kurstider SET "
If alder <> "" Then sql = sql & "alder = " & alder & ", "
If alder2 <> "" Then sql = sql & "alder2 = " & alder2 & ", "
If dag <> "" Then sql = sql & "dag = " & dag & ", "
If tider <> "" Then sql = sql & "tider = " & tider & ", "
If larare <> "" Then sql = sql & "larare = " & larare
sql = sql & " WHERE id = " & id

[blue]'Kontroll så att inte alla värden var tomma...[/blue]
If InStr(sql, "SET WHERE") = 0 Then Conn.Execute sql, , 128
Medlem sedan nov. 200221 inlägg
#9

Allt fungerar perfect om alla fält får ett värde men jag vill att det ska vara OK att inte fylla i vissa fält. Det är då den buggar när fältet "alder" lämnas tomt...

Sorry engine men jag får ett annat syntax fel när jag använder din kod.

Ziggy

Medlem sedan dec. 20003 887 inlägg
#10

Eftersom jag inte är synsk så frågar jag vad ett annat syntax fel kan vara för något?

Medlem sedan dec. 20003 563 inlägg
#11

skriv ut sql-strängen istället så får vi se.
Rent sporadiskt så blir det i alla fall fel när lärare <> "" efter som det då kommer se ut typ
...tider = "tider", WHERE...

Medlem sedan dec. 20003 887 inlägg
#12

cyprys skrev:

skriv ut sql-strängen istället så får vi se.
Rent sporadiskt så blir det i alla fall fel när lärare <> "" efter som det då kommer se ut typ
...tider = "tider", WHERE...

Jo, det kan man ju faktiskt passa sig för...

sql = "UPDATE kurstider SET "
If alder <> "" Then sql = sql & "alder = " & alder & ", "
If alder2 <> "" Then sql = sql & "alder2 = " & alder2 & ", "
If dag <> "" Then sql = sql & "dag = " & dag & ", "
If tider <> "" Then sql = sql & "tider = " & tider & ", "
If larare <> "" Then
  sql = sql & "larare = " & larare
Else
  sql = Left(sql, Len(sql) - 2)
End If
sql = sql & " WHERE id = " & id

[blue]'Kontroll så att inte alla värden var tomma...[/blue]
If InStr(sql, "SET WHERE") = 0 Then Conn.Execute sql, , 128

Men som sagt... posta gärna fel och tillbörlig kod.

Medlem sedan nov. 200221 inlägg
#13

Fel medelandet om jag lämnar fältet "alder" tomt och jag vill att det ska gå bra att göra det.

Feltyp:
Microsoft JET Database Engine (0x80040E07)
Typblandningsfel i villkorsuttryck.
/gds/admin/edit_kurstid_utfor.asp, line 45

Sida:
POST 74 bytes to /gds/admin/edit_kurstid_utfor.asp

POST Data:
id=41&alder=&alder2=Salsa+forts+2&dag=Tors&tider=20%3A45-22%3A00&larare=OL

<%
	id	= request.form("id")
	alder	= request.form("alder")
	alder2	= request.form("alder2")
	dag	= request.form("dag")
	tider	= request.form("tider")
	larare	= request.form("larare")

	response.write "Följande information skickas till databasen: "
	response.write tider

	alder	= "'" & alder & "'"
	alder2	= "'" & alder2 & "'"
	dag	= "'" & dag & "'"
	tider	= "'" & tider & "'"
	larare	= "'" & larare & "'"

		sql = "UPDATE kurstider SET "
		If alder <> "" Then sql = sql & "alder = " & alder & ", "
		If alder2 <> "" Then sql = sql & "alder2 = " & alder2 & ", "
		If dag <> "" Then sql = sql & "dag = " & dag & ", "
		If tider <> "" Then sql = sql & "tider = " & tider & ", "
		If larare <> "" Then
  		sql = sql & "larare = " & larare
		Else
  		sql = Left(sql, Len(sql) - 2)
		End If
		sql = sql & " WHERE id = " & id

		'Kontroll så att inte alla värden var tomma...
		If InStr(sql, "SET WHERE") = 0 Then Conn.Execute sql, , 128

%>

Line 45 = If InStr(sql, "SET WHERE") = 0 Then Conn.Execute sql, , 128

Ziggy

Om jag fyller i alla fält så funkar det perfekt...

Medlem sedan juni 200032 967 inlägg
#14

Om alder är av taltyp ska du inte ha apostrofer runt värdet.

Medlem sedan nov. 200221 inlägg
#15

Hur? Vart? Jag provade på några ställen men.....

Medlem sedan juni 200032 967 inlägg
#16

Här sätter du ju apostrofer runt alla värden:

	alder	= "'" & alder & "'"
	alder2	= "'" & alder2 & "'"
	dag	= "'" & dag & "'"
	tider	= "'" & tider & "'"
	larare	= "'" & larare & "'"

Du ska ju inte ha apostrofer runt värden som ska in i talfält.

Medlem sedan dec. 20003 887 inlägg
#17

Du kan se det själv på dom data du vill skicka in...

josuason skrev:

id=41&alder=&alder2=Salsa+forts+2&dag=Tors&tider=20%3A45-22%3A00&larare=OL

id är numeriskt - inga apostrofer.
alder och alder2 verkar helt skumma enligt mig. Vad är Salsa+forts+2 för typ av information? Apostrofer behöver du där ivarjefall.
dag är text, alltså ska du ha apostrofer där. Samma för tider och larare.

<%
id = request.form("id")
alder = "'" & Replace(Request.Form("alder"), "'", "''") & "'"
alder2 = "'" & Replace(Request.Form("alder2"), "'", "''") & "'"
dag = "'" & Replace(Request.Form("dag"), "'", "''") & "'"
tider = "'" & Replace(Request.Form("tider"), "'", "''") & "'"
larare = "'" & Replace(Request.Form("larare"), "'", "''") & "'"

Response.Write "Följande information skickas till databasen: "
Response.Write tider

sql = "UPDATE kurstider SET "
If alder <> "" Then sql = sql & "alder = " & alder & ", "
If alder2 <> "" Then sql = sql & "alder2 = " & alder2 & ", "
If dag <> "" Then sql = sql & "dag = " & dag & ", "
If tider <> "" Then sql = sql & "tider = " & tider & ", "
If larare <> "" Then
  sql = sql & "larare = " & larare
Else
  sql = Left(sql, Len(sql) - 2)
End If
sql = sql & " WHERE id = " & id

[blue]'Debugläge... skriv ut SQL-frågan om något går snett
'Response.Write sql[/blue]
Conn.Execute sql, lngRA, 128

If lngRA = 0 Then
  Response.Write "Uppdateringen misslyckades."
Else
  Response.Write "Informationen är lagrad."
End If
%>

Skulle detta ge något fel så posta SQL-frågan som skapas.

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