Ms access 创建新记录时的MSAccess事件

Ms access 创建新记录时的MSAccess事件,ms-access,vba,Ms Access,Vba,我使用当前事件根据父窗体上记录的ID更新子窗体的RecordSource属性。问题出现在新记录中,因为ID字段(自动编号)为空。我测试空ID以避免错误,但是当用户键入第一个字符时,我需要在创建记录后立即更新RecordSource 问题在于,脏事件和BeforeInsert事件都是在实际创建记录之前,即在分配ID之前触发的。我需要在分配ID自动编号后触发的事件 提前感谢您的帮助有一个插入后事件将执行您想要的操作--它在插入记录后触发,因此ID存在 如果我理解您的意思,您要使用的事件是Onchan

我使用当前事件根据父窗体上记录的ID更新子窗体的RecordSource属性。问题出现在新记录中,因为ID字段(自动编号)为空。我测试空ID以避免错误,但是当用户键入第一个字符时,我需要在创建记录后立即更新RecordSource

问题在于,脏事件和BeforeInsert事件都是在实际创建记录之前,即在分配ID之前触发的。我需要在分配ID自动编号后触发的事件


提前感谢您的帮助

有一个插入后事件将执行您想要的操作--它在插入记录后触发,因此ID存在

如果我理解您的意思,您要使用的事件是Onchange事件。为了使其在窗体上工作,第一个获得焦点的控件必须具有此事件(即Textbox)。我不知道哪个控件首先在窗体上获得焦点,但是如果它有此事件,那么您可以捕获键的第一个笔划,并在此时运行您希望的过程。在第一次击键时,会创建ID,文本框或使用的任何控件会捕获每次击键,直到控件退出。唯一需要注意的是,每次按下一个键时都会调用此事件,因此您必须创建某种类型的状态变量来设置,以显示您希望执行的操作已经运行,并且不再执行

    dim status as integer(must be declared at form declaration level.)
    if not status then
       do procedure
       Status =-1
    end if

我有点晚了,但是一起使用dirty和newrecord怎么样

i、 e:

如果Me.NewRecord和Me.Dirty那么
'用户创建了一条尚未保存的新记录

如果

我不确定你能不能结束。您担心检查当前最大id是正确的;“自动编号”值可能高于刚刚删除顶行时的值。AfterInsert在保存记录后触发。在此之前,即用户键入字符并创建自动编号后,我需要一个事件。澄清一下:当用户键入时,您可以处理的唯一事件将是按下键、向上键和按下键。当他们停止输入并且文本框失去焦点时,所有事件(onchange、beforeupdate、afterupdate等)都会触发。同样,在保存记录之前不会创建自动编号,不过如果您使用的是vanilla access,则一旦文本框失去焦点,就会发生这种情况。我通常对绑定的子窗体执行的操作是链接主字段和链接子字段,因为access本身可以处理null Id的罚款,或者在用户导航到新记录后设置visible=false,并在inserttl之后再次设置visible=true;你不能得到你想要的,但是如果你有时尝试,你可以得到类似的效果。