2013-10-29 54 views
0

我一直在修改我的Access数据库来清理它并使其更加用户友好。因此,我一直在更改表单标签和控件的名称,以包含_lbl和_Ctrl,而不是通用名称Access分配它们。以前,我有三种单独的窗体(ListingsForm,ListOffersForm,ListDetailsForm),我可以通过使用按钮调用窗体来访问它们。由于表单与主窗体(ListingsForm)直接相关,我将其中两个窗体更改为子窗体。现在,当我尝试添加记录时,我不断收到错误消息。超出堆栈空间和请求错误

在ListingsForm窗体上,有一个Property Address(Address_Ctrl)的控制字段。此控件使用一个组合框,该组合框链接到名为Properties的单独表。如果该属性地址未在下拉框中列出,则用它调出PropertyForm表单以输入新属性。之后,它会重新获得新记录的新列表。在创建子窗体并更改控件名称后,每当我尝试添加新的属性地址时都会收到错误。

运行时错误“2473”:

表达对不在列表中你输入如事件属性设置产生下面的错误。超出堆栈空间。

'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.Requery()Address_Ctrl_NotInList()返回后。

+0

我已经添加了事件处理程序我已经有了NotInList。数据库不仅保存地址。该地址还有其他需要通过物业表格输入的数据,即城市,邮编,包裹#,完整地址。我怀疑我需要在NotInList处理程序中放置某种等待线。 – Dragonsen

+0

您的绑定数据将自动保存,无需设置.Dirty = False手动...我们已经使用此程序添加新城市。 – jacouh

+0

如果我删除脏行然后我得到另一个错误,'运行时错误'2118':您必须保存当前字段,然后再运行Requery操作。' .Dirty = False首先保存主要记录,而不是绑定数据。 – Dragonsen