【问题标题】:Execute a SQL Server stored procedure from MS Access从 MS Access 执行 SQL Server 存储过程
【发布时间】:2015-06-18 01:10:40
【问题描述】:

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

【问题讨论】:

  • 您是否尝试使用 DAO.QueryDef 对象创建传递查询?
  • @gord thompson 不,我没有,我不知道该怎么做...

标签: sql vba stored-procedures sql-server-2012 ms-access-2013


【解决方案1】:

可能最直接的方法是使用 DAO.QueryDef 对象创建一个临时直通查询。如果您在 Access 中有一个现有的链接表,则可以使用其.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'

【讨论】:

    【解决方案2】:

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

     > 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
    

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 2019-03-06
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      相关资源
      最近更新 更多