【问题标题】:How to specify the max of a field +1 when defining a SetField value in a Before Insert trigger?在插入前触发器中定义 SetField 值时如何指定字段 +1 的最大值?
【发布时间】:2022-04-25 13:33:34
【问题描述】:

我有一个数据库,其中有一个表,它的主键是一个自动递增的数字字段,我称之为id

在数据表视图中,我想使用剪切/粘贴一些现有记录来创建一些新记录,然后更新/修改这些记录。粘贴不起作用,因为剪切记录的 id 值已经存在,而 id 是主键。

我想将id 的值设置为max(id)+1 在插入之前以避免冲突。

我尝试使用触发器来执行此操作(使用 Before Change 事件)。但我不知道如何指定max(id)+1

我试过max([id])+1max([id+1]),没有运气。我还尝试在其中填充一条 SQL 语句,例如 select max(id)+1 from thetable。那没用。

有谁知道如何在 MS Access 术语中指定 max(id)+1 以便这可能有效?我不认为 max 是 Access 知道的内置函数。

这是傻事吗?可以让它工作吗?

有没有更好的方法来解决这个问题,也许使用 VBA?

最后,有没有办法在 value 字段中填充 SQL 表达式?

我注意到 MS Access 支持Before ChangeBefore Delete,但不支持Before Insert。此数据库是否有相当于Before Insert 触发器?

谢谢!

【问题讨论】:

  • 你的表是本地表还是链接表?我只是在本地表上尝试过,当我复制粘贴相同的行(包括其 ID 字段)时,AutoNumber ID 字段会自动递增。
  • 你为什么要“剪切/粘贴”,你的意思是“复制/粘贴”吗?这个“自动增量”是自动编号类型字段吗?如果是这样,复制/粘贴在本地或链接表上工作正常。如果这不是自动编号,那么您如何生成此 ID?
  • 更改 = 插入和更新。如果您在插入之前需要特定的行为,请使用Before Change 触发器和IsInsert 常量来测试更改是否为插入。见the docs on Before Change
  • 这只是我在 MS-Access 数据库中创建的一个表。它没有链接到任何东西,所以我猜它是“本地的”?是的,复制/粘贴(抱歉)。不,这不是自动编号,但我认为是。我改变了它,现在可以了。看起来我需要在头上拍一记耳光才能唤醒我检查这个。谢谢!

标签: ms-access vba ms-access-2007


【解决方案1】:

使用“更改前”事件,您可以将值设置为

DMax("[Id]","[YourTableName]")+1

这会起作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多