Доступ к макросам таблицы 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" & Format([PK],"000000")</Argument>
</Action>
</Statements>
</EditRecord>
</Statements>
</ForEachRecord>
</Statements>
</DataMacro>
</DataMacros>