Доступ к макросам таблицы 2016 после вставки изменяет поля во вновь создаваемой записи

Используя пользовательскую форму, поля обновляются оператором во вновь созданной записи. Когда создается новая запись, в этой новой записи есть поля, которые должны обновляться на основе значений в другом поле.

Например, поле CustID обновляется на основе первичного ключа "PK" следующим образом: CustID="NW"&Format([PK],"000000"),

Я могу выполнить это обновление, используя запрос на обновление, однако я бы хотел, чтобы это обновление происходило автоматически сразу после создания новой записи.

Я знаю, что мог бы сделать это, написав код VBA, но я предпочитаю этого не делать. Я должен быть в состоянии сделать это, используя управляемый событиями Table Macro, After Insert. По какой-то причине я не могу заставить это работать, теперь, прежде чем кто-либо спросит, что макросы включены в центре управления безопасностью. Если я смогу заставить это работать, у меня есть другие поля, которые будут обновляться на основе значений, введенных оператором.

Я установил таблицу Macro следующим образом:

After Insert
Edit Record
Set Field CustID="NW"&Format([PK],"000000")

Я чувствую, что это должно работать, но ничего не происходит. Я делаю смелое предположение, что Редактировать запись редактирует вновь созданную запись, это правильно. Я не могу найти какую-либо информацию и / или примеры того, как успешно использовать After Insert для изменения полей во вновь созданной записи.

Вопрос 1: это можно сделать?

И 2: если так, то как?

1 ответ

Только что вставленная запись в макросе данных доступа доступна только для чтения (как в SQL Server или других решениях с триггерами). Вы должны увидеть ошибку, указывающую, что в таблице USysApplicationLog. Однако вы можете найти только что вставленную строку и изменить ее.

Для этого вы можете использовать следующий макрос-код:

SetLocalVar
    Name            NewID
    Expression      =[PK]

For Each Record In  MyTable
Where Condition     =[PK]=[NewID]
    EditRecord
        SetField
            Name    CustID
            Value   ="NW"&Format([PK],"000000")
    End EditRecord

Макрос XML будет выглядеть следующим образом (вы можете вставить XML в окно макроса, чтобы создать макрос):

<?xml version="1.0" encoding="UTF-8"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
   <DataMacro Event="AfterInsert">
      <Statements>
         <Action Name="SetLocalVar">
            <Argument Name="Name">NewID</Argument>
            <Argument Name="Value">[PK]</Argument>
         </Action>
         <ForEachRecord>
            <Data>
               <Reference>MyTable</Reference>
               <WhereCondition>[PK]=[NewID]</WhereCondition>
            </Data>
            <Statements>
               <EditRecord>
                  <Data />
                  <Statements>
                     <Action Name="SetField">
                        <Argument Name="Field">CustID</Argument>
                        <Argument Name="Value">"NW" &amp; Format([PK],"000000")</Argument>
                     </Action>
                  </Statements>
               </EditRecord>
            </Statements>
         </ForEachRecord>
      </Statements>
   </DataMacro>
</DataMacros>
Другие вопросы по тегам