堆栈空间不足和重新查询错误

Posted

技术标签:

【中文标题】堆栈空间不足和重新查询错误【英文标题】:Out of Stack Space & Requery Errors 【发布时间】:2013-10-29 22:15:13 【问题描述】:

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

在 ListingsForm 表单上,有一个属性地址 (Address_Ctrl) 的控制字段。此控件使用一个组合框,该组合框链接到一个名为“属性”的单独表。如果下拉框中没有列出属性地址,则用于调出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':您必须在运行重新查询操作之前保存当前字段。”

将表单作为子表单有助于用户界面,所以我真的不想回到使用三个单独的表单。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

通常,您的评论 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 Database VBA 中重新调试,Response = acDataErrAdded, Access会在Address_Ctrl_NotInList()返回后自动重新查询Address_Ctrl.Requery()。

【讨论】:

我已经添加了 NotInList 的事件处理程序。数据库不只是保存地址。该地址还有其他需要通过房产表格输入的数据,即城市、邮编、包裹编号、完整地址。我怀疑我需要在 NotInList 处理程序中放入某种等待线。 您绑定的数据会自动保存,无需手动设置.Dirty=False...我们已经使用此程序添加新城市。 如果我删除脏行然后我得到另一个错误,'运行时错误'2118':您必须在运行重新查询操作之前保存当前字段。 .Dirty = False 是先保存主记录,而不是绑定数据。 在重新查询控件之前是否添加了 Me.Address_Ctrl.Value = Null ? 如果这样做,我会收到运行时错误“3162”:您试图将 Null 值分配给不是 Variant 数据类型的变量。【参考方案2】:

所以我终于让它正常工作了。原来我必须为表单设计中的控件设置一些默认值。之后,一切顺利。

【讨论】:

以上是关于堆栈空间不足和重新查询错误的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 编译器的堆空间不足问题的解决(cmake版本)

Android Studio 中 gradle 构建 堆栈空间不足

STM8S103 解决Rom空间不足 & Map文件分析

系统错误8:存储空间不足,无法处理此命令.怎么办

魔兽争霸 玩RPG图退出程序的时候显示错误 :内存空间不足

linux处理/tmp文件空间不足