将变量从Access(前端)传递到SQL(后端)存储过程

时间:2013-06-19 19:08:55

标签: sql variables ms-access stored-procedures

我的数据库在SQL中。我使用Access作为前端。是否可以获取文本框的值,将其存储为变量并将其从Access传递给SQL中的存储过程?

2 个答案:

答案 0 :(得分:1)

您可以使用VBA创建执行传递查询的QueryDef。例如,我的SQL Server上有一个名为[myDb]的数据库,我创建了一个名为myDb的ODBC系统DSN,因此Access可以连接到它。该数据库包含一个名为[myContacts] ...

的表
ID  LastName
 1  Thompson
 2  Gumby

...以及名为[getContact]

的存储过程
CREATE PROCEDURE getContact 
    -- Add the parameters for the stored procedure here
    @id int = 1
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM myContacts WHERE ID=@id
END

以下VBA代码创建传递查询,使用标识要处理的ID号的参数执行存储过程,并将返回的行保存在Recordset中:

Sub spTest()
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Dim IdValueToProcess As Long

IdValueToProcess = 2  ' test data

Set qdf = CurrentDb.CreateQueryDef("")
qdf.ReturnsRecords = True
qdf.Connect = "ODBC;DSN=myDb;Trusted_Connection=Yes;"
qdf.SQL = "EXEC dbo.getContact " & IdValueToProcess
Set rst = qdf.OpenRecordset(dbOpenSnapshot)

Debug.Print rst!LastName  ' just to make sure we got a result

rst.Close
Set rst = Nothing
qdf.Close
Set qdf = Nothing
End Sub

答案 1 :(得分:0)

可能有更直接的方法,但您可以:

  1. 在SQL Server中创建一行1列表。

  2. 在执行存储过程之前,Access数据库可以清除该表并将值插入其中(使用标准的Delete和Insert查询)。

  3. 然后,您的存储过程可以通过简单的选择访问该值(或多个值)。