【发布时间】:2022-04-25 13:33:34
【问题描述】:
我有一个数据库,其中有一个表,它的主键是一个自动递增的数字字段,我称之为id。
在数据表视图中,我想使用剪切/粘贴一些现有记录来创建一些新记录,然后更新/修改这些记录。粘贴不起作用,因为剪切记录的 id 值已经存在,而 id 是主键。
我想将id 的值设置为max(id)+1 在插入之前以避免冲突。
我尝试使用触发器来执行此操作(使用 Before Change 事件)。但我不知道如何指定max(id)+1。
我试过max([id])+1 和max([id+1]),没有运气。我还尝试在其中填充一条 SQL 语句,例如 select max(id)+1 from thetable。那没用。
有谁知道如何在 MS Access 术语中指定 max(id)+1 以便这可能有效?我不认为 max 是 Access 知道的内置函数。
这是傻事吗?可以让它工作吗?
有没有更好的方法来解决这个问题,也许使用 VBA?
最后,有没有办法在 value 字段中填充 SQL 表达式?
我注意到 MS Access 支持Before Change 和Before 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