webForumDet fria alternativet

Konstigt fel.

ASP

10 svar · 370 visningar · startad av jazzil

Medlem sedan maj 2003151 inlägg
Frågan#1

Nu sitter jag här på morrgonkvisten med ett roligt fel för alla asp gurus att bråka med.
Jag försöker lägga till ett antal rader i en databas, mysql för att vara exakt. Med följande sql query

 insert into tbl_da (da_ratt, da_datum, da_rest) VALUES ('Funkar denna nu?', '2005-5-16', 1)

Men har provat med alla möjliga olika kombinationer med hakparanteser osv.

da_ratt är ett textfält
da_datum är datum(;))
da_rest är ett int tal

Set Conn2 = Server.CreateObject("ADODB.Connection")
					Conn2.Open application("matsedel")
					'Loopa igenom alla dagar och sätt in i databasen
					for n = 0 To 6
						if request.form(myArray(n) & "Hidden") = 1 then
						
							'sql = "INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('" & request.form(myArray(n) & "dag") & "', '" & DatePart("yyyy", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1)) & "-" & DatePart("m", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1)) & "-" & DatePart("d", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1)) & "', 1)"
							sql = "insert into tbl_dag (da_ratt, da_datum, da_rest) values ('Ratt', '2005-01-02', 1)"
						
							conn2.Excecute(sql)
							Error = "Du har lagt till en ny vecka i databasen"
					
						end if
					Next

Det är loopen som ska sätta in värden i databasen. Har även provat andra sortes loopar än bara for.
Nu kommer jag till det som är konstigt.

Lägger jag insert koden (conn2.Execute) utanför loopen så funkar det hur bra som helst.

Felet:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.20a-debug]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '{ call Excecute('insert into `tbl_dag` ([da_ratt], [da_datum],
Medlem sedan juni 200032 967 inlägg
#2

Skriv ut den färdiga SQL-frågan så kan du säkert se vad som är felet med syntaxen.

Medlem sedan maj 2003151 inlägg
#3

Alla querys från loppen och jag kan inte se några fel.

INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Ratt1', '2005-5-16', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Ratt2', '2005-5-17', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Detta var onsdag', '2005-5-18', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Hmm', '2005-5-19', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Och så fredag', '2005-5-20', 1)
Medlem sedan juni 200032 967 inlägg
#4

Det skulle väl kunna vara så att MySQL inte tycker om att du skriver 2005-5-18. Prova att lägga till kod som fixar en nolla på månad och dag vid lägre värde än 10.

Medlem sedan maj 2003151 inlägg
#5

Slängde ihop funktionen lite snabbt:

function addZero(tal)
	
		Set checkTal 				= New regexp
			checkTal.Pattern		= "^\d{1}$"
			checkTal.Global		= true
			checkTal.IgnoreCase	= true
			
		Set MatchTal = checkTal.Execute(tal)
		
		if MatchTal.Count = 1 then
			tal = "0" & tal
			addZero = tal
		else
			addZero = tal
		end if
		
	end function

Query output

INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('fdsfdsfsd', '2005-05-16', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Tisdag', '2005-05-17', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Något att äta på torsdag', '2005-05-18', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Mja', '2005-05-19', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('Helg .. nästan', '2005-05-20', 1)

Samma fel:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.20a-debug]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '{ call Excecute('INSERT INTO tbl_dag (da_ratt, da_datum, da_res
Medlem sedan juni 200032 967 inlägg
#6

Nu tycker jag spontant att det ser rätt ut, men jag kan iaf ge dig ett lite enklare / kortare förslag för funktionen AddZero, bara för sakens skull, även om den du har fungerar.

function addZero(tal)
     addZero = Right("0" & tal, 2)
End function
Medlem sedan juni 200032 967 inlägg
#7

Du kan ju alltid prova att skriva ut sql-frågan precis ovanför din execute så du får se precis vad MySQL försöker tolka innan det blir fel.

Mvh

Medlem sedan maj 2003151 inlägg
#8
for n = 0 To 6
if request.form(myArray(n) & "Hidden") = 1 then
						
sql = "INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('" & request.form(myArray(n) & "dag") & "', '" & DatePart("yyyy", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1)) & "-" & addZero(DatePart("m", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1))) & "-" & addZero(DatePart("d", getDateFromWeek(request.form("vecka"), request.form("Ar"), n+1))) & "', 1)"
					
	response.write(sql & "<br />" & Vbcrlf)
                'conn2.Execute(sql)
					
	end if
Next

och får querys på 5 (edit: från 7) loopar

INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('dsa', '2005-05-16', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('ggf', '2005-05-17', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('hgj', '2005-05-18', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('jhg', '2005-05-19', 1)
INSERT INTO tbl_dag (da_ratt, da_datum, da_rest) VALUES ('kjh', '2005-05-20', 1)
Medlem sedan juni 200032 967 inlägg
#9

Det jag menade var att du skulle skriva ut, men behålla exekveringen, så du kan se vilken av SQL-frågorna som går åt pipan. Antagligen är det den första, men det vet man aldrig.

Du skriver att du får 7 utskrifter. Får du det, fast du bara visar 5 här?

Medlem sedan maj 2003151 inlägg
#10

Jag får så många som jag har dagar markerade .. i detta fallet Mån till Fredag ... my bad :)

Wah! .. Nu hoppade det igång .. när jag bara hade sql och Conn2.Execute i loopen .. tack för alla hjälp! :bire

Medlem sedan juni 2004533 inlägg
#11

Du jämför en sträng med ett tal, det fungerar aldrig.

Request.Form returnerar alltid en sträng (eller en IStringList egentligen). Du kan inte jämföra strängen med talet 1, du får antingen konvertera strängen till ett tal, eller jämrföra med strängen "1".

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)