使用VBA调用存储过程

问题描述 投票:12回答:2

我正在使用Microsoft SQL Server 2008后端在Access 2010用户前端中工作。

Access中的表都链接到SQL Server数据库。

我有一个存储过程,它将新值(由参数提供)插入到表中。

我之前问过类似的问题,并得到很好的回答Calling Stored Procedure while passing parameters from Access Module in VBA

我不知道如何找到建立连接字符串所需的信息(例如:我不知道提供者/服务器名称/服务器地址)。

[我在这里发现一个问题,指出“如果您已经具有指向SQL Server数据库的Access链接表,那么您可以简单地将其.Connect字符串与DAO.QueryDef对象一起使用以执行存储过程”-[C0 ]

我尝试实现此代码。为了传递参数,我尝试使用前面的示例。

我得到了错误

通话失败

在第Connection string for Access to call SQL Server stored procedure行(更不用说我传递的参数代码可能还很遥远)。

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

有人可以告诉我我的代码有什么问题吗,为什么会出现此错误?

sql-server vba ms-access stored-procedures access-vba
2个回答
16
投票

维多利亚,

您可以使用ADO运行存储过程,如下所示...

Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
qdf.sql = "EXEC dbo.upInsertToInstrumentInterfaceLog"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset(dbOpenSnapshot)

qdf.Parameters.Append qdf.CreateParameter("@BatchID", adVarChar, adParamInput, 60, BatchID)
qdf.Parameters.Append qdf.CreateParameter("@InstrumentName", adVarChar, adParamInput, 60, InstrumentName)
qdf.Parameters.Append qdf.CreateParameter("@FileName", adVarChar, adParamInput, 60, FileName)
qdf.Parameters.Append qdf.CreateParameter("@QueueId", adVarChar, adParamInput, 60, QuenueId)

rst.Close
Set rst = Nothing
Set qdf = Nothing

要获得您的连接字符串,您可以使用该行

Set mobjConn = New ADODB.Connection
mobjConn.Open "your connection string"
Set mobjCmd = New ADODB.Command
With mobjCmd
    .ActiveConnection = mobjConn 
    .CommandText = "your stored procedure"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 0
    .Parameters.Append .CreateParameter("your parameter name", adInteger, adParamInput, , your parameter value)
    ' repeat as many times as you have parameters

    .Execute
End With

在立即窗口中,它应该显示一个您可以使用的连接字符串。

您可以尝试一下,如果有任何问题,请告诉我。


0
投票

也可以制定一个存储的proc调用,以返回结果集作为select语句。

根据此示例:

Debug.Print CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
© www.soinside.com 2019 - 2024. All rights reserved.