【问题标题】:Access, After Insert and the missing ID访问、插入后和缺少的 ID
【发布时间】:2018-03-26 16:38:40
【问题描述】:

我必须创建一个访问网络数据库,并且在向表中插入记录时遇到了一个令人沮丧的问题。

我正在尝试使用 After Insert 宏来设置问题编号字段,因此:

Edit Record
SetField
Name: [Problem Number]
Value =: [ID] (There is no more logic here but even this simplest case fails)

问题在于 ID 没有值,因此问题编号最终为空白。

这个逻辑适用于更新后,因为它在那个时候有一个ID。

我是否可以在不切换到 VB 代码的情况下实现这一点。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    一些事情。您不想使用更新后事件来修改当前记录,因为理论上它会导致更新前事件和更新后事件再次触发。这可能会导致循环。

    如果您考虑到这一点,那么在您将记录全部保存到表中之后就没有什么意义了,然后您再次编辑记录!事实上,您通过设计发现上下文中的当前记录仅在更新事件后读取。因此,您无法在更新后事件的上下文中对当前记录执行编辑记录,如果您检查错误日志,则会收到“只读”错误。

    在更改前事件中,[id] 不可用。但是,您当然可以在更新后事件中获取并使用 [id]。

    但是,如果您要在另一个表中创建一条新记录,则创建记录块之外的 NEXT 行允许您使用

    获取刚刚创建的记录
    [LastCreateRecordIdentity]
    

    所以记录写入发生在创建记录块之外的下一行。

    例如,这里有一些创建新记录的代码,请注意代码的“缩进”。

    如果您单击上面的创建记录命令,那么整个创建代码块将突出显示。注意下一行代码是如何在蓝色代码块之外的,这是我们可以使用 [LastCreateRecordIdentity] 的代码。

    蓝色突出显示的代码是这样的:

    因此,创建记录之外的下一行是您可以获取新 ID 的时间。在上面,我实际上将刚刚通过 returnVars 创建的新 id “返回”到调用例程。

    【讨论】:

    • 非常好。我对此感到有点沮丧,所以我暂时转移到项目的另一部分。当我星期一回来时,我会再看看这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多