Поделиться через


Событие макроса After Delete

Область применения: Access 2013, Office 2013

Событие After Delete возникает после удаления записи.

Примечание.

Событие After Delete доступно только в макросах данных.

Замечания

Используйте событие After Delete для выполнения любых действий, которые необходимо выполнить при удалении записи. Распространенные варианты использования после удаления включают применение бизнес-правил, рабочих процессов, обновление совокупного итога и отправку уведомлений.

При возникновении события After Delete значения, содержащиеся в удаленной записи, по-прежнему доступны. Может потребоваться использовать удаленное значение для увеличения или уменьшения суммы, создания журнала аудита или сравнения с существующим значением в аргументе WhereCondition .

Вы можете использовать функцию Updated("Имя поля"), чтобы определить, изменилось ли поле. В следующем примере кода показано, как использовать инструкцию If, чтобы определить, изменилось ли поле PaidInFull.

 
If  Updated("PaidInFull")   Then 
 
    /* Perform actions based on changes to the field. */ 
 
End If 
 

Доступ к значению в удаленной записи можно использовать с помощью следующего синтаксиса.

[Old].[Field Name]

Например, чтобы получить доступ к значению поля QuantityInStock в удаленной записи, используйте следующий синтаксис.

[Old].[QuantityInStock]

Значения, содержащиеся в удаленной записи, удаляются безвозвратно по завершении события After Delete .

Следующие макрокоманды можно использовать в событии После удаления .

Тип команды

Команда

Управление

Оператор макроса "Примечание"

Управление

Оператор макроса "Группа"

Управление

Макроблок Если... То... Иначе

Блок данных

Макрокоманда "СоздатьЗапись"

Блок данных

Макрокоманда "ИзменитьЗапись"

Блок данных

Макрокоманда "ДляКаждойЗаписи"

Блок данных

Блок данных "НайтиЗапись"

Действия с данными

Макрокоманда "ОтменитьИзменениеЗаписи"

Действия с данными

Макрокоманда "УстранитьОшибкуМакроса"

Действия с данными

Макрокоманда "УдалитьЗапись"

Действия с данными

Макрокоманда "ВыходДляКаждойЗаписи"

Действия с данными

Макрокоманда "РегистрацияСобытия"

Действия с данными

Макрокоманда "ПриОшибке"

Действия с данными

Макрокоманда "ВыводОшибки"

Действия с данными

Макрокоманда "ЗапускМакросаДанных"

Действия с данными

Макрокоманда "ОтправитьПочту"

Действия с данными

Макрокоманда "ЗадатьПоле"

Действия с данными

Макрокоманда "ЗадатьЛокПеременную"

Действия с данными

Макрокоманда "ОстановитьВсеМакросы"

Действия с данными

Макрокоманда "ОстановитьМакрос"

Чтобы создать макрос данных, который фиксирует событие After Delete , выполните следующие действия.

  1. Откройте таблицу, для которой требуется записать событие After Delete .

  2. На вкладке Таблица в группе События после щелкните После удаления.

В конструкторе макросов отображается пустой макрос данных.

Пример

В следующем примере кода событие After Delete используется для выполнения некоторой обработки при удалении записи из таблицы Пожертвования. Когда запись удаляется, сумма пожертвования субразгируется из поля ПожертвованияReceived в таблице ПожертвованияReceived и TotalDonatedField в таблице Доноров.

Щелкните здесь, чтобы просмотреть копию макроса, который можно вставить в конструктор макросов.

Чтобы просмотреть этот пример в конструкторе макросов, выполните следующие действия.

  1. Откройте таблицу, для которой требуется записать событие After Delete .

  2. На вкладке Таблица в группе События после щелкните После удаления.

  3. Выберите приведенный ниже код и нажмите клавиши CTRL+C, чтобы скопировать его в буфер обмена.

  4. Активируйте окно конструктора макросов и нажмите клавиши CTRL+V.

    <?xml version="1.0" encoding="UTF-16" standalone="no"?> 
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/04/application"> 
      <DataMacro Event="AfterDelete"> 
        <Statements> 
          <Comment>Initialize a variable and assign the old</Comment> 
          <Action Name="SetLocalVar"> 
            <Argument Name="Name">varAmount</Argument> 
            <Argument Name="Value">[Old].[Amount]</Argument> 
          </Action> 
          <ConditionalBlock> 
            <If> 
              <Condition>Not (IsNull([Old].[CampaignID]))</Condition> 
              <Statements> 
                <ForEachRecord> 
                  <Data> 
                    <Reference>Campaigns</Reference> 
                    <WhereCondition>[ID]=[Old].[CampaignID]</WhereCondition> 
                  </Data> 
                  <Statements> 
                    <EditRecord> 
                      <Data /> 
                      <Statements> 
                        <Action Collapsed="true" Name="SetField"> 
                          <Argument Name="Field">[DonationsReceived]</Argument> 
                          <Argument Name="Value">[DonationsReceived]-[varAmount]</Argument> 
                        </Action> 
                      </Statements> 
                    </EditRecord> 
                  </Statements> 
                </ForEachRecord> 
              </Statements> 
            </If> 
          </ConditionalBlock> 
          <ConditionalBlock> 
            <If> 
              <Condition>Not (IsNull([Old].[DonorID]))</Condition> 
              <Statements> 
                <ForEachRecord> 
                  <Data> 
                    <Reference>Donors</Reference> 
                    <WhereCondition>[ID]=[Old].[DonorID]</WhereCondition> 
                  </Data> 
                  <Statements> 
                    <EditRecord> 
                      <Data /> 
                      <Statements> 
                        <Action Name="SetField"> 
                          <Argument Name="Field">[TotalDonated]</Argument> 
                          <Argument Name="Value">[TotalDonated]-[varAmount]</Argument> 
                        </Action> 
                      </Statements> 
                    </EditRecord> 
                  </Statements> 
                </ForEachRecord> 
              </Statements> 
            </If> 
          </ConditionalBlock> 
        </Statements> 
      </DataMacro> 
    </DataMacros>
    SetLocalVar 
                    Name    varAmount 
              Expression   =[Old].[Amount] 
     
    If   Not(IsNull([Old].[CampaignID]]))   Then 
     
         For Each Record In     Campaigns 
            Where Condition     =[ID]=[Old].[CampaignID] 
                      Alias 
            EditRecord 
                      Alias 
                  SetField   ([DonationsReceived], [DonationsReceived] - [varAmount]) 
            End EditRecord 
     
    End If 
     
    If   Not(IsNull([Old].[DonorID]]))   Then 
     
         For Each Record In    Donors 
            Where Condition     =[ID]=[Old].[DonorID] 
                      Alias 
            EditRecord 
                      Alias 
     
              SetField 
                             Name   [TotalDonated] 
                            Value   =[TotalDonated]-[varAmount] 
            End EditRecord 
    End If