Вызов хранимой процедуры в Access 2007 из VB 6.0 - PullRequest
0 голосов
/ 24 ноября 2010

Мне нужно вызвать хранимую процедуру, созданную в Access 2007, из программы в VB 6.0.

Это рабочая хранимая процедура в базе данных Access, когда вы щелкаете правой кнопкой мыши -> Design View:

PARAMETERS prodCode Text ( 255 ), orderNum Text ( 255 );
SELECT Sum(FullPrice) AS Expr1
FROM Transacs
WHERE (((Transacs.prodcode)=[prodCode]) AND ((Transacs.ordernum)=[orderNum]) AND ((Transacs.Type)='R'));

Это код, который нужно исправить в VB 6.0:

Set TransRs = New ADODB.Recordset
Dim transcommQuery As String
transcommQuery = "execute SP_SumOfTransComm " & prodcode & " " & orderNum

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic

Строка 3: transcommQuery = "execute SP_SumOfTransComm" & selProdcode & "" & selPolNo - это то, что мне нужно исправить. Как оттуда правильно вызвать хранимую процедуру?

Ответы [ 3 ]

2 голосов
/ 24 ноября 2010

Вы можете использовать объекты Command для вызова хранимых процедур.Для подробной информации вы можете посмотреть здесь .

Ваш код будет выглядеть примерно так:

Dim Cmd1 As ADODB.Command
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = db
Cmd1.CommandText = "SP_SumOfTransComm"
Cmd1.CommandType = adCmdStoredProc
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, prodcode)
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, orderNum)
Dim TransRs As ADODB.Recordset
Set TransRs = Cmd1.Execute()
0 голосов
/ 29 ноября 2010

Это работает для меня сейчас, делая следующее:

Set TransRs = New ADODB.Recordset
Dim transcommQuery As String

transcommQuery = "{ call SP_SumOfTransComm('" & prodcode & "','" & orderNum & "') }"

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic
0 голосов
/ 25 ноября 2010

Ваши параметры должны быть заключены в кавычки и разделены запятыми, например

transcommQuery = "EXECUTE SP_SumOfTransComm '@prodcode', '@orderNum';"
transcommQuery = Replace$(transcommQuery, "@prodcode", prodcode)
transcommQuery = Replace$(transcommQuery, "@orderNum", orderNum)

... но тогда вам придется беспокоиться о экранировании кавычек и других подобных неприятностей.объект Command со строго типизированными объектами Parameter и пусть поставщик OLE DB обрабатывает очищающие значения.См. Ответ @ MicSim для примера кода.

...