【问题标题】:"Run time error 3167: Record is deleted" when unchecking a selection in multi select listbox取消选中多选列表框中的选择时出现“运行时错误 3167:记录已删除”
【发布时间】:2020-07-13 21:11:13
【问题描述】:

我有一个包含多选列表框的表单,用户可以根据需要勾选任意数量的选项,然后点击“保存”按钮,该按钮将表单字段和勾选的选项保存在各自的表格中.

一切正常,直到用户取消选中之前保存的选择。

我尝试了几件事,包括刷新表单和记录集,但均无济于事。

在测试以找到解决方案时,我注释掉了与表单的保存按钮相关的每一行 VBA 代码。单击此按钮时,注释掉的代码显然没有任何反应,但是如果我尝试使用窗口的“x”按钮关闭表单,则会收到一个消息框,指出“记录已被删除”

我不知道在哪里看这一点,我已经尝试压缩和修复数据库,也有负面结果。

我没有要发布的代码,因为无论我尝试运行什么代码,我都会收到错误,一个完全空的子程序仍然会给我错误。

同样,这种情况发生在用户取消选中之前已被选中的选择时。

这是表单的屏幕截图:

红色的列表框是罪魁祸首。

用户可以编辑表单上的每个字段,一切正常,用户甚至可以通过勾选项目从列表框中“添加”选择,它会保存它们,并在下次记录时显示它们已查看。

当用户取消选中之前选中的选项之一时会出现问题。

列表框的详细信息:

  • 它是一个多选列表框,由使用列表框向导创建的“查找”填充
  • 所选值以逗号分隔列表的形式保存在字段中
  • 字段本身是另一个表的查找,允许多个值

在这一点上,我什至不确定我是否正确地解释了自己,我已经在“兔子洞”中走得太远了!

如果需要任何澄清声明,请尽管询问。

【问题讨论】:

  • 如果你打开表单,什么都不做,然后点击关闭,你得到一个错误?表单控件究竟是如何绑定到记录集的?您是否尝试过 REQUERY 而不是 REFRESH?列表框的“ControlSource”是什么?
  • @WayneG.Dunn,我已经编辑了我的问题来回答你的一些问题。是的,我尝试了 REQUERY,我只是收到一个错误,告诉我还没有加载记录。控制源是存储在此表单编辑的表中的查找字段。
  • 请解释一下您的“列表框”到底是什么。是定制解决方案的“ListView”还是“ListBox”。您的复选框列是如何插入的?任何代码来构建它?
  • 我使用了表单设计功能区上的列表框向导,当被要求输入值时,我选择了一个已经创建的表,其中包含您在屏幕截图中看到的值,然后选择了完成。创建后,我将列表框的源分配为“tow”表中的相应字段。拖车表中的该字段是一个“查找”字段,我也是使用内置查找向导创建的,允许多个值。我没有创建它的任何代码,只是我使用向导时所做的任何访问。
  • 这是“绑定”形式还是未绑定形式?如果绑定,那么什么代码处理列表框选择?您将列表框的“ControlSource”设置为“Tow”表中的字段? (1) 'Tow' 表是否存储了该表单上的所有其他数据? (2) 从未见过链接到表格列的多选列表框 - 你确定吗?没有代码?最后,您在“Tow”表中有一个“查找”字段,但它基于什么?同一张桌子,还是不同?

标签: ms-access vba ms-access-2010


【解决方案1】:

以下描述了我认为您正在尝试做的事情的实现,但可能会有一些变化。关键是我能够定期重现您的“已删除记录”错误,但不知何故终于让它停止了。

  1. 我创建了一个名为“res_area”的表,其中包含一个 ID 字段和一个“区域”。我填充了“1E、1F、1I、1J、3C、3D、3E、3F、3I、3J、3K 等”的行。
  2. 我创建了表格“res_tow”,其中包含您在表单上显示的所有字段。我包含了一个名为“area”的字段,它是一个 LOOKUP 字段,其来源如下:“SELECT [res_Area].[TTID], [res_Area].[Area] FROM [res_Area] ORDER BY [Area];”。允许多个值 = 是。
  3. 我使用记录源创建了表单“frmEditTow”:

    选择 res_Tow.TowID、res_Tow.TCompany、res_Tow.TPhone1、res_Tow.TPhone2、 res_Tow.TPhone3, res_Tow.TType, res_Tow.TTown, res_Tow.TAddress, res_Tow.TFileName, res_Tow.TComments, res_Tow.TChecks, res_Tow.area FROM res_Tow;

  4. 我将带有代码的“保存记录”按钮添加到:“DoCmd.RunCommand acCmdSaveRecord”和“Me.Requery”

  5. 我可以添加或删除列表项的任意组合并保存更改。

对于它的价值,我认为我早期版本的表单行源包括字段'area'和'area.value'。这样,表单记录计数反映了所选列表框项目的总数 - 而不是表“res_Tow”中的行数。

祝你好运!

【讨论】:

  • 我看了看我自己的表格,我也有'area.value'并把它拿出来。起初它似乎有所作为,但我做了更多的测试,我发现了一些东西,我现在可以添加或删除我想要的任何东西,除了保存的第一个选择。 IE。如果您首先选择 1E,然后再选择其他任何内容并保存表格,从那时起您可以删除您想要的任何内容而不受惩罚,除了 1E,此时错误再次发生。我开始认为这可能是一个 Access 错误...
  • 不想告诉你,但我没有遇到这个问题...你想打开一个聊天窗口吗?我想我可以只用这些对象创建一个数据库并为你放置一个地方。
  • 我不知道确切的问题是什么,但我重新创建了导致我出现问题的那个字段和查找,并且由于某种原因,“新”字段正在做它应该做的事情现在。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多