【问题标题】:clear listbox when adding new record to form向表单添加新记录时清除列表框
【发布时间】:2016-12-16 10:11:53
【问题描述】:

我正在使用 Access 2007。我有一个表单(孩子的详细信息),其中包含一个列出孩子特殊需求的列表框。列表框与儿童表和具有受控特殊需求列表的表处于多对多关系。列表框的 RowSource 是

SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID = [Child-Need].[Child FK]) 
    ON Need.ID = [Child-Need].[Need FK] 
ORDER BY [Category];

当我尝试添加新记录时,列表框内容不清除,继续锁定与现有记录相关的值。

如何清除列表框的内容,以便用户添加与新孩子相关的需求?

随后,我发现当在表单上从一个记录移动到另一个记录时,列表框的内容仍然是出现的第一条记录的内容。看起来好像我有一个严重的错误,大概在我的 SQL 中!

【问题讨论】:

  • listboxName.requery??
  • 唉,不。试过了!
  • 这是绑定表格吗?
  • 它是另一种形式 Family 的子形式。表单上的另一个子表单 Carer 工作正常。

标签: ms-access listbox vba


【解决方案1】:

行源没有对表单中显示的当前子项的引用。

我认为你需要类似的东西

SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID=[Child-Need].[Need FK]) 
    ON Need.ID=[Child-Need].[Need ID] 
WHERE Child.ID = Forms!frmChild!ID
ORDER BY [Category];

(将frmChild 替换为您的表单名称)。

然后您需要在表单的OnCurrent 事件中添加myListbox.Requery,以便在移动到不同记录时显示当前数据。

编辑:如果它是子表单,则类似于

WHERE Child.ID = Forms!frmFamily!frmChild.Form!ID

Refer to Form and Subform properties and controls

【讨论】:

  • 感觉不错,只是我找不到 Access 将接受的 WHERE 子句第二部分的表述。当表单打开和每次更改子记录时,它都会要求我输入 ID 作为参数。当我提供它时,会出现正确的数据。你非常接近:我的将是 'Child.ID = Forms!frmFamilies!frmChild.Form!ID'。
  • 如果我将列表框 RowSource 添加为子窗体的 OnCurrent 事件中的代码的一部分,Access 不会在打开窗体时询问参数。现在它可以工作了。谢谢!
【解决方案2】:

尝试在表单加载中使用以下代码:

 Dim intItemsInList As Integer
 Dim intCounter As Integer

 intItemsInList = Me![lstTest].ListCount

 For intCounter = 0 To intItemsInList - 1
   Me![lstTest].RemoveItem 0
 Next

【讨论】:

  • 不幸的是,这不起作用。由于记录被锁定,我在 RemoveItem 上收到错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2011-04-28
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多