从 MS Access 执行 SQL 服务器存储过程

Execute a SQL Server stored procedure from MS Access

我使用 MS Access 2013 和 SQL Server 2012。我已将我的 SQL 服务器数据库连接到 MS Access。我通过 SQL 服务器身份验证连接到 SQL 服务器。我想执行一个存储过程,并将一个值输入到我的一个表单的文本框中。多年来我一直在尝试这样做,但我在这个网站上找到的任何东西都不适合我。任何人都可以帮助我并给我一些关于如何编写基本 VBA 代码来执行该过程的提示吗?请帮忙!!!

可能最直接的方法是使用 DAO.QueryDef 对象创建临时传递查询。如果您在 Access 中有一个现有的链接 table,那么您可以使用它的 .Connect 属性(ODBC 连接信息)。您需要做的就是设置 QueryDef 的 .SQL 属性 来调用 (EXEC) 存储过程,如下所示:

Option Compare Database
Option Explicit

Private Sub Command2_Click()
    Dim cdb As DAO.Database, qdf As DAO.QueryDef
    Set cdb = CurrentDb
    Set qdf = cdb.CreateQueryDef("")
    ' get .Connect property from existing ODBC linked table
    qdf.Connect = cdb.TableDefs("dbo_myContacts").Connect
    qdf.sql = "EXEC dbo.addContact N'" & Replace(Me.Text0.Value, "'", "''") & "'"
    qdf.ReturnsRecords = False
    qdf.Execute dbFailOnError
    Set qdf = Nothing
    Set cdb = Nothing
End Sub

因此,例如,如果 Text0 文本框包含 Thompson,则 QueryDef 将执行

EXEC dbo.addContact N'Thompson'

如果文本框包含 O'Rourke,则 QueryDef 将执行

EXEC dbo.addContact N'O''Rourke'

经过反复试验,这个对我有用

 > Private Sub UpdateItems_Click()
    >     Dim cdb As DAO.Database, qdf As DAO.QueryDef
    >     Set cdb = CurrentDb
    >     Set qdf = cdb.CreateQueryDef("")
    >     ' get .Connect property from existing ODBC linked table
    >     qdf.Connect = cdb.TableDefs("dbo_AccesLinkedTable").Connect
    >     qdf.SQL = "EXEC dbo.YourStoreProcedure"
    >     qdf.ReturnsRecords = False
    >     qdf.Execute dbFailOnError
    >     Set qdf = Nothing
    >     Set cdb = Nothing
    > 
    >  MsgBox "Records Updated!"
    > 
    > End Sub