我一直在修改我的Access数据库以清理它并使其更加用户友好。因此,我一直在更改表单标签和控件上的名称,以包含_lbl和_Ctrl,而不是通用名称Access分配它们。以前,我有三个单独的表单(ListingsForm,ListOffersForm,ListDetailsForm),我可以使用按钮来调用表单。由于表单与主表单(ListingsForm)直接相关,因此我将两个表单更改为子表单。现在,当我尝试添加记录时,我不断收到错误。
在ListingsForm表单上,有一个属性地址(Address_Ctrl)的控制字段。此控件使用一个组合框,该组合框链接到名为Properties的单独表。如果属性地址未在下拉框中列出,则用于调出PropertyForm表单以输入新属性。之后,它被重新获得以获得具有新记录的新列表。在创建子表单并更改控件名称后,每当我尝试添加新的属性地址时都会收到错误。
运行时错误'2473':
您作为事件属性设置输入的表达式On Not in List会产生以下错误。堆栈空间不足。
'Add Address Form Script
Private Sub Address_Ctrl_NotInList(NewData As String, Response As Integer)
DoCmd.OpenForm "PropertyForm", , , , acFormAdd
Call Address_Ctrl_AfterUpdate
End Sub
'Requery Address List Script
Private Sub Address_Ctrl_AfterUpdate()
Forms!MLSListForm.Dirty = False
Me!Address_Ctrl.Requery
End Sub
它突出显示了Forms!MLSListForm.Dirty = False行。我试过Me.Dirty = False,但我得到了同样的错误。如果我完全删除该行,我会得到'运行时错误'2118':您必须在运行Requery操作之前保存当前字段。'
将表单作为子表单有助于用户界面,所以我真的不想回到三个单独的表单。任何帮助将不胜感激。
答案 0 :(得分:0)
通常,你的评论是Address_Ctrl_AfterUpdate()事件处理程序,
你可以尝试这个事件处理程序:
Private Sub Address_Ctrl_NotInList(NewData As String, Response As Integer)
'
' add in Properties tables for NewData:
' By calling SQL Server via ADO:
' INSERT INTO Properties (City) (NewData)...
' Or
'
'
' Now NewData Exists, do this:
'....
' and then set new value and status:
'
Response = acDataErrAdded
'
' here you can then modify new city:
'
DoCmd.OpenForm "PropertyForm", , , "City='" & NewData & "'", acFormPropertySettings
'
End Sub
我在Access数据库VBA中重新调试了,响应= acDataErrAdded, 在Address_Ctrl_NotInList()返回后,Access将自动重新查询Address_Ctrl.Requery()。
答案 1 :(得分:0)
所以我终于让它正常工作了。事实证明我必须为表单设计中的控件设置一些默认值。在那之后,它运作得很好。