【问题标题】:ListBox Retaining Selection Data after Requery重新查询后列表框保留选择数据
【发布时间】:2016-06-03 16:33:07
【问题描述】:

我目前正在使用一个列表框,该列表框从表中删除包含所选文本的值。我有以下代码:

Private Sub DeleteEntry_Click()

Dim DeleteTbl As String
Dim Msg As String



If IsNull(Me.lstSolution) = True Then
    MsgBox "Please Select a Entry", vbOKOnly, "No Entry Selected"
Else
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?")
    Msg = "Are you sure you wish to delete all entrys containing: "
    Msg = Msg & Me.lstSolution
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?")
End If

If DeleteTbl = vbYes Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Delete * FROM [Solutions] WHERE [Solutions].SolutionText = '" & Me.lstSolution & "'"
    DoCmd.SetWarnings True
Else
     'Do Nothing
End If

    Me.lstSolution.Requery

End Sub

我遇到的问题是,从表中清除条目后,我再次单击按钮(不选择任何内容),之前选择的值仍然出现在 MsgBox 中。我需要清除这个值,这样会出现一个错误消息框,说没有选择任何条目

【问题讨论】:

  • lstSolution 如何绑定?
  • 顺便说一句,我发现使用DoCmd.RunSQL 通常是不好的做法。这意味着您需要使用DoCmd.SetWarnings,如果您忘记重新打开它们/出现问题并且它们没有重新打开,这将是一个真正的痛苦。我认为应该使用CurrentDb.Execute。这具有返回 RecordsAffected 属性的额外好处,您可以使用该属性来确定删除了多少记录。
  • 如果您不想选择列表框行,Me!lstSolution.Value = Null 不为您做吗?
  • 您好抱歉回复晚了,最近很忙。据我所知,lstSolution 不受约束。 lstSolution 从按下按钮时运行的查询中获取数据,但所有这些都有效。我会修改 DoCmd 语句并实施您的解决方案。不幸的是,@HansUp 并没有清除数据。我不知道为什么保留它

标签: vba ms-access


【解决方案1】:

我已设法通过添加 NotSelected 变量来解决该问题,如下所示:

Private Sub DeleteEntry_Click()

Dim DeleteTbl As String
Dim Msg As String
Dim NotSelected As String

If IsNull(Me.lstSolution) = True Then
    MsgBox "Please Select a Entry", vbOKOnly, "No Entry Selected"
    NotSelected = True
Else
    Msg = "Are you sure you wish to delete all entrys containing: "
    Msg = Msg & Me.lstSolution
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?")
    NotSelected = False
End If

If NotSelected = True Then
    End
ElseIf DeleteTbl = vbYes Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Delete * FROM [Solutions] WHERE [Solutions].SolutionText = '" & Me.lstSolution & "'"
    DoCmd.SetWarnings True
End If

    Me.lstSolution.Requery


End Sub

【讨论】:

  • 有趣的是,当您将布尔值 TrueFalse 设置为已声明的字符串类型 NotSelected 时,它会起作用。如果任何布尔值都匹配整数值而不是字符串。
【解决方案2】:

ListBox.Requery 不刷新ListBox.Value,也不刷新Listbox.Column(index)

您必须在lstSolution.Requery 之后调用lstSolution.SetFocus。这会将新值从当前记录集传播到列表框列。

我不确定,但我认为这是 MS Access 中的一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 2010-10-18
    • 2015-10-13
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    相关资源
    最近更新 更多