MS Access FE/SQL在保存后需要自动编号才能在表单上填充

MS Access FE/SQL在保存后需要自动编号才能在表单上填充,sql,database,ms-access,ms-access-2007,Sql,Database,Ms Access,Ms Access 2007,因此,我有一个带有SQL BE的Access 2007 FE。我使用绑定表单来添加新记录或更新现有记录 我的问题是:与本地访问表不同,使用SQL表会导致自动编号字段(“SeqID”)在保存记录之前不可用。我在表单上有一个“保存”按钮,它对新记录执行各种验证步骤,然后在成功验证后将新记录添加到表中。此时,我可以在代码中获取该记录的自动编号,但问题是我无法获取表单以在SeqID字段中更新/显示该记录。因为它是一个绑定表单,所以我不能简单地更新SeqID.Value。我需要更新此字段,因为它稍后将用于

因此,我有一个带有SQL BE的Access 2007 FE。我使用绑定表单来添加新记录或更新现有记录

我的问题是:与本地访问表不同,使用SQL表会导致自动编号字段(“SeqID”)在保存记录之前不可用。我在表单上有一个“保存”按钮,它对新记录执行各种验证步骤,然后在成功验证后将新记录添加到表中。此时,我可以在代码中获取该记录的自动编号,但问题是我无法获取表单以在SeqID字段中更新/显示该记录。因为它是一个绑定表单,所以我不能简单地更新SeqID.Value。我需要更新此字段,因为它稍后将用于其他事情,例如更改字段的审核跟踪等


如果有任何帮助,我们将不胜感激。

在这些方面尝试一下。这对我很有用:

Private Sub AText_AfterUpdate()
   Me.Dirty = False
   Me.Recalc
End Sub

如果实验有效,只需将这些步骤融入代码流即可。

当使用SharePoint或SQL server,或者实际上是大多数基于服务器的数据库时,在记录保存时间之前不会生成自动编号ID。对于窗体+子窗体,当焦点移动到子窗体时,Access将始终自动保存记录,因此将子记录附加到这些父窗体+记录时不会出现问题

对于绑定表单,获取自动编号ID的唯一方法是强制保存记录。简单的代码如下:

If isnull(me!ID) = true then
    ' we don't have a record primary key yet, save record
   Me.Dirty = false
End if
此时,您可以使用PK自动编号

MsgBox "pk = " & me!id

因此,一个简单的me.Dirty=false将保存记录,并将强制生成下面的ID和代码,然后可以自由使用+随意获取PK自动编号。

您是否尝试过
如果me.Dirty=True,那么me.Dirty=false:me.Requery
?也就是说,强制保存,然后重新查询或只是重新查询?。您使用的是链接表还是ADP?是的,我尝试过强制保存,但没有成功,除非我没有将代码放入正确的事件中。这是一个SQL BE,所以表是链接的。您尝试过重新查询吗?您使用了哪个事件?在我的保存按钮代码中,在记录集写入表并关闭后,我尝试了重新绘制和重新查询,但什么都没有。我还将If Me.Dirty=True然后Me.Dirty=False添加到OnDirty事件中,但没有影响。绑定表单是一个连续表单吗?如果不是,则可以通过将未绑定表单与ADODB一起使用来更好地利用SQL BE,这并不能回答此问题,但可能有助于数据库性能:)Hmmm,似乎不起作用…您建议在哪里添加它?AText是我窗体上的控件名称。这是该控件的afterupdate事件。使用基于表的新表单,以避免由于现有代码而导致的复杂性。我怀疑你现有的代码,因为MS Access的默认设置是保存一条记录,所以我不知道你的“保存”按钮是如何工作的,也不知道为什么它会出现在绑定表单中。好的,我通过将它添加到下一个将要填写的逻辑文本框中来实现这一点。我之所以有“保存”按钮,是因为我不使用任何记录选择器,并且在保存之前需要进行某些验证。使用您的方法是可行的,但实际上在我的验证之前保存了记录……但这应该不是什么大问题。谢谢你的帮助!请注意,“保存”按钮可能没有任何有效性。如果用户只是关闭表单或使用其他形式的导航,请确保未保存记录。尝试将recalc添加到您的“保存”按钮,看看它是否有效。这正是我刚才所做的,而且它有效……因此,在我的情况下,更好的解决方案是在写入记录集后直接将其添加到“保存”按钮代码中,以便它通过验证。