01. marts 2007 - 17:53
#1
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO tabel(felt1,felt2) VALUES(?,?)"
cmd(0) = felt1var
cmd(1) = felt2var
set rs = cmd.Execute()
01. marts 2007 - 17:55
#2
conn er naturligvis dit åbne connection-objekt og rs er det resultat der kommer ud af din Execute (i dette tilfælde et recordset med en kolonne som indeholder antallet af påvirkede rækker).
Du kan naturligvis også bare kalde cmd.Execute uden at lægge det over i et recordset-objekt...
02. marts 2007 - 10:31
#3
hej, hvis jeg gør dette får jeg følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e51'
Provider cannot derive parameter information and SetParameterInfo has not been
02. marts 2007 - 12:10
#4
Hvilken database bruger du og hvordan ser DIN sql ud (de faktiske tabel- og feltnavne)?
Det kan være du skal oprette hver parameter eksplicit inden du tildeler værdier til dem, men jeg sidder og bruger SQL Server til daglig og der har jeg ingen problemer med ovenstående kode. Dog har jeg også sat cmd.CommandType = adCmdText som en del af forberedelsen af Command-objektet.
Jeg har lavet en funktion til at udføre kommandoer med, som ser således ud (og den fungerer som sagt mod en SQL Server for inline sql-sætninger):
function ExecSQLCommand(sql, params, cn)
dim cmd, idx, param, result
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cn
cmd.CommandType = adCmdText
cmd.CommandText = sql
if isArray(params) then
idx = 0
for each param in params
cmd(idx) = param
idx = idx + 1
next
end if
set result = cmd.Execute()
set cmd = nothing
set ExecSQLCommand = result
end function
og den kaldes således:
sql = "INSERT INTO tabel1(felt1, felt2) VALUES(?,?)"
ExecSQLCommand sql, Array(vaerdi1, vaerdi2), conn
Parameter 2 (Array'et) er så de parametre SQL-sætningen skal fødes med I DEN RÆKKEFØLGE SOM PARAMETRENE FOREKOMMER I SQL-SÆTNINGEN! Det sidste er vigtigt, da der benyttes anonyme parametre :)
Det kan godt være du får fejl på linien med CommandType, men så er det fordi du ikke har inkluderet den include-fil som følger med ado, hvor alle konstanter er defineret, eller du ikke har erklæret meta-informationer for ADO i din kode. Du kan enten gøre en af de nævnte, eller benytte den numeriske værdi for adCmdText (som jeg mener er 1).