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

Posted

技术标签:

【中文标题】MS-ACCESS - 在插入之前/之后插入/更新触发器需要【英文标题】:MS-ACCESS - Before insert/after insert/update trigger required 【发布时间】:2018-06-04 02:47:38 【问题描述】:

我有一个 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 and update 触发器(表事件宏)中使用了上述数据宏,但它似乎不起作用。

请帮忙:)

【问题讨论】:

使用正确版本的 ms-access 更新您的标签。并正确描述“它似乎不起作用” 【参考方案1】:

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

当 RunningPercent 大于 100 时会出现错误,从 Application Log 可以看到,但是记录会被插入到表中。

<?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>

对于

中的每条记录

【讨论】:

以上是关于MS-ACCESS - 在插入之前/之后插入/更新触发器需要的主要内容,如果未能解决你的问题,请参考以下文章

在 ms-access 表中插入多行的 SQL 代码

在 MS-Access 中插入带日期时间的 SQL 命令

尝试使用“插入”ms-access 数据库时出错

将日期插入 Ms-Access 数据库的问题

MS-Access 连接表在两个互斥列表之间插入/删除(2 个列表框)

使用 Oledb 对象插入 ms-access 查询获取无效查询异常