Just nu i M3-nätverket
Jump to content

SQL-sats


Patric Johansson

Recommended Posts

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”
Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

Patric Johansson

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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?

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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!

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...