2013-06-19 3 views
1

MY DB находится в SQL. Я использую Access как интерфейс. Можно ли взять значение текстового поля, сохранить его как переменную и передать его из Access в хранимую процедуру в SQL?Передача переменной из Access (frontend) в SQL (backend) Сохраненная процедура

+0

Просто проверка. Под «SQL» вы имеете в виду «MS SQL Server»? – PowerUser

ответ

0

Там может быть более прямым методом, но вы можете:

  1. Сделать 1 строку, 1 таблицу столбца в SQL Server.

  2. Перед выполнением хранимой процедуры, ваш Access db может очистить эту таблицу и вставить в нее свое значение (используя стандартные запросы «Удалить» и «Вставить»).

  3. Затем ваша хранимая процедура может получить доступ к этому значению (или значениям) с помощью простого выбора.

0

Вы можете использовать VBA для создания QueryDef, который выполняет сквозной запрос. Например, у меня есть база данных с именем [myDb] на моем SQL Server, и я создал системный DSN системы ODBC с именем 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 [email protected] 
END 

Следующая УВА создает запрос проходном, выполняет хранимой процедуры с параметром, идентифицирующим идентификационный номер для обработки, и сохраняет возвращаемую строку в наборе записей:

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 
Смежные вопросы