Just nu i M3-nätverket
Gå till innehåll

SQL-sats


Patric Johansson

Rekommendera Poster

Patric Johansson

Till Anders N!

 

Jag testade att sätta så på alla som har Tal som datatyp men då fick jag detta error:

Error Type:

Microsoft JET Database Engine (0x80040E14)

Syntax error in INSERT INTO statement.

/console.nu/member_accessories_add.asp, line 43

/ProTeuS

Resistance is futile. You will be assimilated.

- citat från ”Star Trek - First Contact”
Länk till kommentar
Dela på andra webbplatser

Patric Johansson

Inte jag heller.

Jag hann läsa och skrev svaret här.

Men jag kommer inte ihåg riktigt hur du skrev ändå.

Men nu kommer jag bara till startsidan med den länken.

 

[inlägget ändrat 2002-11-14 12:53:49 av ProTeuS]

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

[Rättelse]

Jag har flera text och tal i INSERT och om jag använder mig av " & tal & " så verkar det bli error om jag använder mig av datatypen tal.

Error Type:

Microsoft JET Database Engine (0x80040E14)

Syntax error in INSERT INTO statement.

/member_system_add.asp, line 34

 

[inlägget ändrat 2002-11-14 13:01:46 av ProTeuS]

Länk till kommentar
Dela på andra webbplatser

Skriv gärna din SQL-sats här...

 

Du hade något i stil med:

 

execute("xxxxxxxxxx ( xxxx '" & tal & "')")

 

Där ska du inte ha några apostrofer före och efter citationstecknen.

 

Ciao,

Anders

 

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

Set rstemp = conntemp.Execute("INSERT INTO Tabellen (Tabellrad1, Tabellrad2, Tabellrad3, Tabellrad4, Agare) VALUES ('" & text1 & "', '" & tal1 & "', '" & text2 & "', '" & tal2 & "', '" & userid & "')")

 

Länk till kommentar
Dela på andra webbplatser

De kolumner i databasen som är tal, ska som sagt inte ha apostrofer runt datan.

 

Nu minns jag inte, men.. om tal1, tal2 och userid är tal så ska det istället för:

 

Set rstemp = conntemp.Execute("INSERT INTO Tabellen (Tabellrad1, Tabellrad2, Tabellrad3, Tabellrad4, Agare) VALUES ('" & text1 & "', [color="#ff0000"]'[/color]" & tal1 & "[color="#ff0000"]'[/color], '" & text2 & "', [color="#ff0000"]'[/color]" & tal2 & "[color="#ff0000"]'[/color], [color="#ff0000"]'[/color]" & userid & "[color="#ff0000"]'[/color])")

 

bli:

 

Set rstemp = conntemp.Execute("INSERT INTO Tabellen (Tabellrad1, Tabellrad2, Tabellrad3, Tabellrad4, Agare) VALUES ('" & text1 & "', " & tal1 & ", '" & text2 & "', " & tal2 & ", " & userid & ")")

 

Vilket borde resultera i en SQL-sats i stil med:

 

INSERT INTO Tabellen (Tabellrad1, Tabellrad2, Tabellrad3, Tabellrad4, Agare) VALUE ('första texten', 15, 'andra texten', 34, 22)

 

Ciao,

Anders

 

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

Nu har jag gjort som du sagt, men jag får följande error:

Error Type:

Microsoft JET Database Engine (0x80040E14)

Syntax error in INSERT INTO statement.

/member_system_add.asp, line 34

 

Länk till kommentar
Dela på andra webbplatser

Spara SQL-frågan i en variabel istället, och skriv ut den, så ser du lättare om det blivit något fel.

 

dim SQLfraga
SQLfraga="INSERT INTO Tabellen (Tabellrad1, Tabellrad2, Tabellrad3, Tabellrad4, Agare) VALUES ('" & text1 & "', " & tal1 & ", '" & text2 & "', " & tal2 & ", " & userid & ")"
response.write("<br><br>frågan: " & SQLfraga & "<br><br>")
Set rstemp = conntemp.Execute(SQLfraga)

 

Ciao,

Anders

 

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

[Rättelse]

frågan: INSERT INTO Medlem_Basenhet (Basenhet_Namn, Basenhet_Skick, Basenhet_Info, Manual_Sprak, Manual_Skick, Manual_Info, Kartong_Sprak, Kartong_Skick, Kartong_Info, Agare) VALUES ('Nintendo 64', 4, '', , , '', , , '', 10)

[inlägget ändrat 2002-11-14 13:46:57 av ProTeuS]

Länk till kommentar
Dela på andra webbplatser

Som du ser där så saknar flera av kolumnerna värden, vilket gör att frågan blir felaktig.

 

Vill du inte mata in alla värden, så ange bara de du vill ha... Endast Basenhet_Namn, Basenhet_Skick och Agare har varden där.. (förutom de tomma strängarna)

 

Om de övriga ska ha värden också, så misslyckas du med att ge dem värden.

 

Om du bara vill mata in Basenhet_Namn, Basenhet_Skick och Agare gör du istället såhär:

 

SQLfraga="INSERT INTO Medlem_Basenhet (Basenhet_Namn, Basenhet_Skick, Agare) VALUES ('" & BasenhetNamnText &"', " & BasenhetSkickTal & ", " & userid & ")"

 

Ciao,

Anders

 

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

Basenhet_Namn, Basenhet_Skick och Agare är obligatoriska.

Sen är dom andra frivillig information, det är därfär dom är tomma.

 

Så hur ska jag lösa detta?

 

Länk till kommentar
Dela på andra webbplatser

Aha. Då får du antingen bygga upp din fråga dynamiskt, eller ge de andra standardvärden som fungerar i frågan.

 

nedanstående borde fungera för att dynamiskt bygga frågan (relativt otestad :)

 

sub AddColumnNumber(name, value, byref names, byref values)
if (len(names)<>0) then names=names & ", "
names=names & name
if (len(values)<>0) then values=values & ", "
values=values & CInt(value)
end sub

sub AddColumnString(name, value, byref names, byref values)
if (len(names)<>0) then names=names & ", "
names=names & name
if (len(values)<>0) then values=values & ", "
values=values & "'" & replace(value, "'", "''") & "'"
end sub

function MakeInsertQuestion(table, names, values)
MakeInsertQuestion="INSERT INTO " & table & " (" & names & ") VALUES (" & values & ")"
end function

dim names, values

' ------
names=""
values=""
call AddColumnString("Basenhet_Namn", BasenhetNamnText, names, values)
call AddColumnNumber("Basenhet_Skick", BasenhetSkickTal, names, values)
call AddColumnNumber("Agare", userid, names, values)
' ------

dim SQLfraga
SQLfraga=MakeInsertQuestion("Medlem_basenhet", names, values)

response.write("<br><br>Frågan: " & SQLfraga & "<br><br>")

 

Då får SQLfraga din SQL-fråga, och.. bara de fält/värden som du anger med hjälp av "AddColumnNumber" och "AddColumnString" kommer att komma med.

 

Du lägger sedan bara till med t.ex:

 

call AddColumnNumber("userid", 15, names, values)

call AddColumnUsername("username", "kalle", names, values)

 

Du vill förmodligen göra något i stil med:

 

dim names, values
names=""
values=""
if (Basnamn<>"") then call call AddColumnString("Basenhet_Namn", Basnamn, names, values)
if (Basskick<>"") then call call AddColumnNumber("Basenhet_Skick", Basskick, names, values)
....
SQLfraga=MakeInsertQuestion("Medlem_basenhet", names, values)

response.write("<br><br>Frågan: " & SQLfraga & "<br><br>")

 

De två procedurerna "AddColumnNumber" och "AddColumnString" borde vara relativt säkra, och verifiera att man inte skickar in "fel" värden till databasen. (Liknande koller behövs göras på namnet också, ifall användaren kan påverka det)

 

Du behöver inte heller tänka på att lägga till apostrofer runt alla strängar, eftersom AddColumnString gör det åt dig.

 

Ciao,

Anders

 

Länk till kommentar
Dela på andra webbplatser

Patric Johansson

Tack för all hjälp!

 

Nu måste jag dra och för den delen har du säker något viktigare för dig än att hjälpa mig.

 

Tack ännu en gång!

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...