我使用MS Access 2013和SQL Server 2012.我已将SQL Server数据库连接到MS Access。我通过SQL Server身份验证连接到SQL Server。我想执行一个存储过程,其值在我的一个表单中输入到文本框中。我一直试图这么做多年,但我在这个网站上找到的任何东西都不适合我。任何人都可以帮助我,并给我一些关于如何编写基本的VBA代码来执行该程序的提示?请帮忙!!!
答案 0 :(得分:4)
可能最直接的方法是使用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'
答案 1 :(得分:1)
经过试验和错误,这个对我有用
> 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