Ссылка на только что добавленную запись при использовании вызова VBA в AfterInsert DataMaco - PullRequest
0 голосов
/ 19 марта 2019

Access 2016, таблица с макрокомандой AfterInsert.

В комментарии к предыдущему вопросу, который я больше не могу найти, Альберт Д. Каллал (пользователь: 10527) отметил, что если кто-то использует подход Set LocalVar для вызова пользовательской функции в vba, то эта vba "сессия" не видит вновь вставленную запись.

Даже если вы передадите идентификатор только что добавленной записи, любые запросы, ссылающиеся на таблицу, в которую только что добавлена ​​запись, не увидят вновь вставленную запись.

Кто-нибудь разработал обходной путь, чтобы, например, при создании закрывающей таблицы вновь добавленная запись была видимой или могла использоваться?

Это очень похоже на проблему, которой Альберта Каллал предлагает общие решения для копирования поверх существующей записи с использованием подхода «после обновления», чтобы обойти невозможность создания записи в каждом цикле. Однако в этом случае я хотел бы использовать результат запроса в качестве основы для копирования / вставки, а не просто копировать существующую строку или «жестко кодировать» бизнес-логику для изменений в datamacro (следовательно, было бы легко делать, если VBA подход мог видеть только что добавленную строку).

Конкретный вариант использования пытается создать способ вставки «индуцированных» записей в приложение учета. Каждый зарабатывает деньги, которые не облагаются налогом, поэтому было бы неплохо создать автоматическую запись в журнале, показывающую будущие обязательства по уплате налога. Другими словами, наличие записи в таблице должно автоматически генерировать дополнительные записи, а бизнес-логика этих дополнительных записей определяется с помощью запросов.

Еще более конкретно, учитывая таблицу «транзакции» с полями RegisterID, AccountID, Amount, TrDate и таблицу «Induced Transaction Queries», которая задает запросы для предоставления индуцированных транзакций с полями AutoNumberId, QueryThatDefinesAdditionalTransactions (и несколькими строками, например, «Запрос, который добавляет себя», «Запрос, который добавляет налоговую ответственность», «Запрос, который вычисляет часть налога с продаж»),

как datamacro может создавать строки в таблице «Транзакции для анализа» на основе итерации по таблице «Индуцированные запросы транзакций» и вставки результатов запроса в каждую строку, примененную к новой добавленной строке в оригинале "таблица транзакций"

Thx

1 Ответ

1 голос
/ 20 марта 2019

Ну, хотя при вызове VBA из макроса после события вставки невозможно вставить только что вставленную строку, эта подпрограмма VBA может читать + обновлять столько ДРУГИХ строк, сколько вам нужно. И если эта новая строка или данные, которые вы записываете в VBA, должны включать данные из только что вставленной строки?

Хорошо передайте столбцы подпрограмме VBA. Теперь он может сложить все остальные строки, а затем включить значения, только что переданные из макроса данных.

Таким образом, макрос данных (после вставки) может выглядеть так:

enter image description here

И код VBA, таким образом, может выглядеть так:

Public Function AfterU(vid As Variant, Amount As Variant)

  Debug.Print vid, Amount

  Dim rst     As DAO.Recordset
  ' open table, sum data
  ' add Amount passed.

  ' write out data to some table.
  ' caution - don't add reocrds to this table that has the trigger
  ' else you wind up in a endless loop


End Function

Вышеуказанное, конечно, должно быть помещено в стандартный модуль кода (не в формы), и должно быть определено как общедоступное, как указано выше.

Таким образом, хотя вы обнаружите, что добавленная JUST запись еще не зафиксирована в таблице (она должна быть), вы все равно можете запустить + вызвать некоторый код VBA. Вы просто не получаете в свои руки запись только что (вот-вот будет) вставлена.

Однако, так как вы можете передать необходимые столбцы, такие как сумма и т. Д., Чтобы включить в итоговую сумму? Тогда вы можете написать столько обновлений VBA и вставить код, сколько пожелаете. Таким образом, вы можете извлекать некоторые записи, создавать итоги, а теперь обновлять некоторые существующие записи или даже добавлять новые записи. Просто включите новую сумму также.

Как уже отмечалось, вы не хотите «запутывать» запись в таблицу, в которой есть такой триггер со вставками VBA, поскольку вы легко можете застрять в бесконечном цикле.

Тем не менее, для добавления, обновления или вставки в другую таблицу вы должны делать то, что вам нравится, в коде VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...