调用存储过程VBA

Vic*_*Jay 11 sql-server ms-access vba stored-procedures access-vba

背景:我正在使用Microsoft SQL Server 2008后端的Access 2010用户前端工作.访问中的表都链接到SQL Server数据库.我有一个存储过程,将新值(由参数提供)插入表中.我经历了很多例子,但我不明白是否真的很接近它或者我完全没有.我之前问了一个类似的问题并得到了一个好的anwser,但我有关于连接字符串的问题.这是在VBA中从Access模块​​传递参数时调用存储过程的问题/ anwser

我不知道,也不知道如何找到建立连接字符串所需的信息(例如:我不知道提供者/服务器名称/服务器地址).我在这里发现了一个问题:"如果你已经有一个指向SQL Server数据库的Access链接表,那么你可以简单地使用它的.Connect字符串和DAO.QueryDef对象来执行存储过程" - Access的连接字符串调用SQL Server存储过程我试图实现这个代码,但我不确定如何传递参数,所以我尝试使用前面的例子.但是我在"Set rst = qdf.OpenRecordset(dbOpenSnapshot)"这一行得到了错误"call failed",更不用说我的传递参数代码可能是关闭的.

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  
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我的代码有什么问题以及为什么我会收到此错误?谢谢!

The*_*ish 15

维多利亚,

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

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
Run Code Online (Sandbox Code Playgroud)

要获取连接字符串,可以使用该行

Debug.Print CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
Run Code Online (Sandbox Code Playgroud)

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

如果你遇到任何问题,你会试试并告诉我.

  • 连接字符串可能需要不同,因为 CurrentDB.TableDef 对象默认使用 DAO,而此连接使用 ADO。http://www.connectionstrings.com 是一个非常有用的资源,可以帮助您找出必要的更改。 (2认同)
  • 什么是“ Me.Connection”?引发错误“无效使用Me关键字”。 (2认同)