MS-ACCESS - перед вставкой / после вставки / обновления необходим триггер - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица PropertyOwnership , которая имеет поле PercentOwnership .Обратите внимание, что у любой собственности может быть несколько владельцев, поэтому мы требуем процент владения для каждого владельца.

При добавлении записи в таблицу PropertyOwnership я хотел бы вставить триггер, который обеспечит добавление правильного процентного значения, т.е. когда мы добавляем все процентные владения свойством, оно не должно превышать 100.

Я попытался создать макрос данных, управляемый событиями, после триггера вставки / обновления следующим образом:

Имя макроса: InvalidOwnership

Parameter 1 name: PropertyNameTemp
Parameter 2 name: PercentOwnershipTemp

SetLocalVar Name: RunningPercent
Expression: 0

lookup each record in PropertyOwnership where PropertyName = PropertyNameTemp
   SetLocalVar Name: RunningPercent
   Expression      : RunningPercent + PercentOwnership

If PercentOwnershipTemp + RunningPercent > 100

RaiseError.

Я использую вышеуказанный макрос данных в триггере «После вставки и обновления» (макрос событий таблицы), но, похоже, он не работает.

Пожалуйста, помогите:)

1 Ответ

0 голосов
/ 21 января 2019

Использовать Для каждой записи в блоке вместо Поиск каждой записи , поскольку она будет работать только с первой записью.

Когда значение RunningPercent больше 100, оно будет повышатьсяошибка, которую можно увидеть из Журнала приложений , однако запись будет вставлена ​​в таблицу.

<?xml version="1.0" encoding="UTF-8"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
   <DataMacro Name="InvalidOwnership">
      <Parameters>
         <Parameter Name="PropertyNameTemp" />
         <Parameter Name="PercentOwnershipTemp" />
      </Parameters>
      <Statements>
         <Action Name="SetLocalVar">
            <Argument Name="Name">RunningPercent</Argument>
            <Argument Name="Value">0</Argument>
         </Action>
         <ForEachRecord>
            <Data>
               <Reference>PropertyOwnership</Reference>
               <WhereCondition>[PropertyName]=[PropertyNameTemp]</WhereCondition>
            </Data>
            <Statements>
               <Action Name="SetLocalVar">
                  <Argument Name="Name">RunningPercent</Argument>
                  <Argument Name="Value">[RunningPercent]+[PercentOwnership]</Argument>
               </Action>
            </Statements>
         </ForEachRecord>
         <ConditionalBlock>
            <If>
               <Condition>[RunningPercent]&gt;100</Condition>
               <Statements>
                  <Action Name="RaiseError">
                     <Argument Name="Number">1234</Argument>
                     <Argument Name="Description">Invalid OwnerShip</Argument>
                  </Action>
               </Statements>
            </If>
         </ConditionalBlock>
      </Statements>
   </DataMacro>
</DataMacros>

Для каждой записи в

enter image description here

...