Access SQL: получить значение идентификатора затронутой записи из оператора вставки или из DAO.QueryDef - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно преобразовать некоторые запросы SQL для доступа к SQL. Некоторые из них используют @@ identity, чтобы вставить две связанные записи в две разные таблицы. К сожалению, запрос доступа может содержать только одну инструкцию (т.е. я не могу выбрать @@ identity после инструкции вставки).

Это невозможно:

insert into table1 (values)
  select values from table1 where id=@id;
select @@identity;

Предполагается, что этот пример оператора скопирует запись из Таблицы 1 в новую запись в указанной таблице, а затем сделает то же самое в Таблице 2, ссылаясь на новую запись из Таблицы 1.

Вот как выглядит SQL-запрос:

        INSERT INTO Table1 ( some_value, the_other_values)
        SELECT  @new_value as some_value, the_other_values
        FROM    Table1
        WHERE   id = @oldID

        SELECT @New_id = @@identity

        INSERT INTO     Table2 ( idP, other_values)
            SELECT  @New_id AS idP, other_values
            FROM    Table2
            WHERE   (idP = @Old_id)

Я пытался сделать это в двух утверждениях, используя vba, но я не нашел способа получить доступ к @@ identity из другого запроса.

Вот vba - я опустил объявления, реальный код - это цикл, но это важная часть:

Set qdf = CurrentDb.QueryDefs("first_part_of_query")
        qdf!New_id = userInput_newID
        qdf!oldID = userInput_oldID
        qdf.Execute
        Set qdf = CurrentDb.QueryDefs("second_part_of_query")
        qdf!New_id = the_identityvalue 'WHAT DO I SET THIS TO?
        qdf.Execute

1 Ответ

0 голосов
/ 25 апреля 2018

Вам нужно использовать один экземпляр вашей базы данных, а затем вы можете просто использовать OpenRecordset("SELECT @@IDENTITY") для получения значения идентификатора.

Dim db As DAO.Database
Set db = CurrentDb
Set qdf = db.QueryDefs("first_part_of_query")
qdf!New_id = userInput_newID
qdf!oldID = userInput_oldID
qdf.Execute
Set qdf = db.QueryDefs("second_part_of_query")
qdf!New_id = db.OpenRecordset("SELECT @@IDENTITY").Fields(0)
qdf.Execute
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...