1

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

4

2 回答 2

1

您可以使用 VBA 创建执行传递查询的 QueryDef。例如,我的 SQL Server 上有一个名为 [myDb] 的数据库,并且我创建了一个名为的 ODBC 系统 DSN myDb,以便 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
于 2013-06-19T19:43:41.350 回答
0

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

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

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

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

于 2013-06-19T19:25:43.907 回答