MS-ACCESS - 在插入/插入/更新触发器之前需要

时间:2018-06-04 02:47:39

标签: ms-access ms-access-2010 ms-access-2016 ms-access-data-macro

我有一个 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.

我在After insert和update触发器(表事件宏)中使用上面的数据宏,但它似乎不起作用。

请协助:)

1 个答案:

答案 0 :(得分:0)

使用 For Each Record in 块,而不是 LookUp Each Record ,因为它将仅操作第一条记录。

当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