代码之家  ›  专栏  ›  技术社区  ›  Alex Silverman

访问VBA的列表框。Requery命令清除列表项

  •  0
  • Alex Silverman  · 技术社区  · 7 年前

    我有一个访问表单,我希望用户选择一个AwardNumber。当他们选择奖励时,该奖励的相关文档显示在“不完整”或“完整”列表框中。然后我希望他们能够将项目从一个列表移动到另一个列表。列表框是单选的。

    enter image description here


    不完整的列表框(在设计中表示未绑定)有3列。绑定列为1,但第一列和第三列的宽度为0,因此隐藏。列表框还具有以下行源:
    SELECT DocTbl.DocID, DocTbl.DocTitle, DocTbl.DocLink FROM DocTbl WHERE ((DocTbl.Complete <> Yes) AND (DocTbl.AwardNumber = Forms!Select_Doc_To_Code!Award_CBox.Text)) ORDER BY DocTbl.DocID

    (完整的列表框具有相同的内容,但不是 DocTbl.Complete <> Yes DocTbl.Complete = Yes .)


    Me.Incompletes.Requery Me.Completes.Requery

    这两个按钮触发代码以“移动”项目。下面是顶部按钮的代码,用于将文档从未完成项“移动”到完成列表框(即,将文档的“完成”值设置为“是”,然后重新查询列表框)。指示的行是出错的地方:

    Sub Move_To_Complete_Click()
      docID = Incompletes.Column(0, Incompletes.ListIndex)
    
      Set Tbl = CurrentDb.TableRefs("DocTbl")
      Set db = CurrentDb
    
      db.Execute = "UPDATE DocTbl " & _
      " SET DocTbl.Complete = Yes " & _
      " WHERE DocTbl.DocID = " & docID
    
    ---->Me.Incompletes.Requery
    ---->Me.Completes.Requery
    End Sub
    

    换句话说,更新查询可以工作(我在表中看到更新的数据),但当我尝试重新查询两个列表框以刷新它们时, 所有物品都消失了 来自两者!。此外,如果我从组合框中选择另一个奖项,然后重新选择 奖励,列表再次正确填充, 只要运行相同的。重新查询命令!

    我试过了 Me.Refresh , Me.Recalc . 我还尝试再次设置行源。我想知道重新询问是否为时过早;我已经设置了断点和DoEvents,所以我不认为这是一个计时问题,但可能更多的代码需要停止运行才能重新查询。这毫无意义,因为重新询问 密码

    我知道还有其他方法可以做到这一点(我已经尝试过,但失败了),但我真的很想知道为什么这种方法不起作用。

    提前感谢!!

    1 回复  |  直到 4 年前
        1
  •  2
  •   Erik A    7 年前

    你正在使用 .Text 正如DataWriter建议的那样,您不应该这样做。

    属性仅在字段具有焦点时可用(请参见 MSDN

    因为你把它叫做 OnClick 的事件 Move_To_Complete 按钮,那个按钮有焦点,所以 .文本 属性不可用。

    两种解决方法:

    1. 使用 Award_CBox.SetFocus
    2. 使用 Forms!Select_Doc_To_Code!Award_CBox.Value 使用value属性。注意,这假设绑定列与显示的列相同。