我的数据库在SQL中。我使用Access作为前端。是否可以获取文本框的值,将其存储为变量并将其从Access传递给SQL中的存储过程?
答案 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)
可能有更直接的方法,但您可以:
在SQL Server中创建一行1列表。
在执行存储过程之前,Access数据库可以清除该表并将值插入其中(使用标准的Delete和Insert查询)。
然后,您的存储过程可以通过简单的选择访问该值(或多个值)。