webForumDet fria alternativet

Fel i SQL uttryck?

4 svar · 488 visningar · startad av Brimba

BrimbaMedlem sedan dec. 19995 875 inlägg
#1

Hej!

Kan någon se något fel på denna raden?

När jag kör uttrycket får jag följande rad:

INSERT INTO tabOrder (SaljarID) VALUES (7);INSERT INTO tabOrderArt (OrderID) SELECT OrderID FROM TabOrder ORDER BY OrderID DESC;INSERT INTO tabOrderArt (ArtID, Artikel, ArtAnt, ArtExkl) VALUES ('1003', 'MAXI Tower ATX', '1', '795')

Grundkoden ser ut så här:

SQLStmt="INSERT INTO tabOrder (SaljarID) VALUES (7);INSERT INTO tabOrderArt (OrderID) SELECT OrderID FROM TabOrder ORDER BY OrderID DESC;INSERT INTO tabOrderArt (ArtID, Artikel, ArtAnt, ArtExkl) VALUES ('" & Request.Form("prodID") & "', '" & Request.Form("ArtNamn") & "', '" & Request.Form("Antal") & "', '" & Request.Form("ArtExkl") & "')"

Felmeddelandet jag får är:

Microsoft OLE DB Provider for ODBC Drivers error '8007000e'

[Microsoft][ODBC Microsoft Access 97 Driver] Characters found after end of SQL statement.

/kategori/add.asp, line 28

Line 28 är alltså när jag kör SQL uttrycket:

connection.execute(SQLStmt)

Tacksam för hjälp

Mvh
patrik

tohaMedlem sedan dec. 1999707 inlägg
#2

Om du skall skicka IN värden i en batch så måste du skapa ett recordset i gränssnittet med locktype som "adLockBatchOptimistic" (= 4). Det gör du genom:


Set objRec = Server.CreateObject("ADODB.Recordset")
sSql = "select * from min_tabell"
objRec.Open sSql, , , adLockBatchOptimistic

...

Jag tror det skall fungera, är lite osäker om attributen till open()-metoden.

------------------
/ Torbjörn Hansson, webbutvecklare/gränssnittsprogrammerare
Spetsdata AB

BrimbaMedlem sedan dec. 19995 875 inlägg
#3

Jag provade med följande kod nu

Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\blabla\blabla\databas.mdb"

SQLStmt="INSERT INTO tabOrder (SaljarID) VALUES (7);INSERT INTO tabOrderArt (OrderID) VALUES (SELECT OrderID FROM TabOrder ORDER BY OrderID DESC);INSERT INTO tabOrderArt (ArtID, Artikel, ArtAnt, ArtExkl) VALUES (" & Request.Form("prodID") & ", " & Request.Form("ArtNamn") & ", " & Request.Form("Antal") & ", " & Request.Form("ArtExkl") & ")"

Set RSobj = Server.CreateObject("ADODB.Recordset")
RSobj.Open SQLStmt, , , adLockBatchOptimistic
connection.execute(RSobj)
Connection.Close

Men fick följande felmeddelande:

ADODB.Recordset error '800a0bb9'

The application is using arguments that are of the wrong type, are out of acceptable range, or are in conflict with one another.

/kategori/add.asp, line 29

Line 29 är:

RSobj.Open SQLStmt, , , adLockBatchOptimistic

Hoppas på hjälp!

///Patrik

emissionMedlem sedan dec. 19996 721 inlägg
#4

adLockBatchOptimistic är en enum-konstant, som man får med sig om man t.ex. inkluderar adovbs.inc

Värdet på den är 4, så skriv bara

adLockBatchOptimistic=4

före open-satsen, eller kör med

RSobj.Open SQLStmt, , , 4

så borde det fungera

BrimbaMedlem sedan dec. 19995 875 inlägg
#5

Emission, jag spår att du har ett email :e

125 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)