ms-access - 从 Access 中的 SQL Server 存储过程获取结果集

标签 ms-access vba

我很“幸运”地继承了一个需要大量清理的 Access 数据库。实际上,我们将放弃 Access 并将其转换为 .NET/SQL Server。但目前我们保留 Access 数据库的 UI 并将所有查询移至 SQL Server。

不幸的是,我从未真正直接使用过 Access,所以我在工作中遇到了困难。

我正在寻找一种方法来编写一个函数,该函数接受存储过程和一些参数值,并在 SQL Server 上执行存储过程并将结果作为结果集返回。

所以签名可能看起来像......

Public Function ExecuteStoredProcedure(storedProcName As String, parameterValues As String) As RecordSet

传入的参数值将以逗号分隔。

因此对此函数的调用示例可能看起来像......

Set returnValues = ExecuteStoredProcedure("SP_GetTableXYZContents","'01/01/2011','ABCD',2345")

这看起来很微不足道,但我似乎无法让它正常运行。谁能指出我正确的方向?

我让它们简单地通过以下方式执行(但无法获取返回值)

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "...connectionstring..."
conn.Execute storedProcCall, dbSQLPassThrough

请注意,在上面的代码中,该函数仅采用一个字符串变量(SP 名称和参数值,其中 SP 名称和值以空格分隔,值以逗号分隔。

预先感谢您的帮助!

最佳答案

有几种方法可以实现这一点。这里有两种可能性。

第一个是最简单的:

  ' String specifying SQL.
  SQL = "My_StorProc parm1, parm2, parm3"
  ...
  ' For a stored procedure that doesn't return records.
  MyDb.Execute SQL, dbSQLPassThrough
  i = MyDb.RowsAffected
  ...
  'For a stored procedure that returns records.
  set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough)

引用号:How To Call Stored Procedures Using Data Access Objects

第二个使用 ADODB 对象:

   Dim Conn As ADODB.Connection
   Dim Cmd As ADODB.Command
   Dim Rs As ADODB.Recordset
   Dim Connect As String

   sConnect= "driver={sql server};" & _
             "server=server_name;" & _
             "Database=pubs;UID=uder_id;PWD=password;"

   ' Establish connection.
   Set Conn = New ADODB.Connection
   Conn.ConnectionString = sConnect
   Conn.Open

   ' Open recordset.
   Set Cmd = New ADODB.Command
   Cmd.ActiveConnection = Conn1
   Cmd.CommandText = "sp_AdoTest"
   Cmd.CommandType = adCmdStoredProc
   Cmd.Parameters.Refresh
   Cmd.Parameters(1).Value = 10
   Set Rs = Cmd1.Execute()

   ' Process results from recordset, then close it.
   Rs.Close
   Conn.Close
   Set Rs = Nothing
   Set Cmd = Nothing
   Set Conn = Nothing

引用号:How To Invoke a Stored Procedure with ADO Query Using VBA/C++/Java

关于ms-access - 从 Access 中的 SQL Server 存储过程获取结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246647/

相关文章:

excel - 通过VBA为一列中的每个单元格添加符号

java - Jackcess,具有多个匹配行的循环非常慢,

excel - 如何使用 Excel VBA 在运行时打开 MS Access?

sql - MS Access创建带有自动增量和默认日期的表

php - vba 中的 hmacsha1 加密不等于使用 pack 方法的 php hmac sha1 值

ms-access - 如何计算表中的字段数?

forms - ACCESS 2010 系统资源超标

sql - 与 Jet 4 驱动程序相比,MS Office 12.0 Access 数据库引擎 OLE DB 提供程序驱动程序为文本列分配不同的数据类型

sql - Access 记录集产生 NAME?

xml - 带有或带有 block 的对象变量未设置