【发布时间】:2016-01-13 13:41:50
【问题描述】:
我完全被这个难住了。跳到底部阅读问题
这是我的列表框 (DocumentList),它从“Documents”表中获取字段:
Document Name Status Notes Consultation Notes
Doc A Started Document Started Aim to process on 05/05/16
Doc B Processing Document Processing Aim to complete on 05/05/16
Doc C Complete Complete on 01/01/16 N/A
我设置了 onclick 事件,因此当您从列表框中选择一行时,它会将每个字段分配给一个文本框/组合框。
文本框/组合框名称:
txtDocument
StatusCombo
txtNotes
txtConNotes
'DocumentList'点击事件中每一个的代码:
Private Sub DocumentList_Click()
txtDocument = DocumentList.Column(0)
StatusCombo = DocumentList.Column(1)
txtNotes = DocumentList.Column(2)
txtConNotes = DocumentList.Column(3)
从列表框中将数据分配给它们后,您可以对其进行编辑。我有一个更新按钮,按下该按钮时会将数据库中的所有内容替换为文本框/组合框中的所有内容。然后重新查询列表框并显示更新的数据。
这是我的更新按钮的代码:
Private Sub UpdateButton_Click()
CurrentDb.Execute "UPDATE [Documents] " & _
"SET [Document Name] = '" & Me.txtDocument & "'" & _
", [Status] = '" & StatusCombo.Value & "'" & _
", [Notes] = '" & Me.txtNotes & "'" & _
", [Consultation Notes] = '" & Me.txtConNotes & "'" & _
"WHERE [Document Name] = '" & DocumentList.Column(0) & "'" & _
"AND [Status] = '" & DocumentList.Column(1) & "'" & _
"AND [Notes] = '" & DocumentList.Column(2) & "'" & _
"AND [Consultation Notes] = '" & DocumentList.Column(3) & "'"
DocumentList.Requery
End Sub
我的问题是代码仅适用于 3 个文档中的 2 个。代码的所有方面都有效,但仅适用于某些文档。这对我来说没有任何意义。起初我以为可能是拼写错误,但即使是这样,也不应该更新任何文档。但其中一些会,1 不会。..
知道为什么这段代码会更新一些文档,但不更新其他文档吗?
【问题讨论】:
-
将您的
UPDATE语句文本存储在字符串变量 strUpdate 中。然后添加Debug.Print strUpdate并像这样执行它:CurrentDb.Execute strUpdate, dbFailOnErrorAccess 是否会为您提供有关失败更新的更多信息? -
我发现了错误。有些文档在最后一个字段“咨询说明”中没有存储任何内容。这些文件是我无法更新的。但是,如果我直接在该表字段中输入一个值,然后尝试从它的工作形式更新它们。我不明白的是;然后我可以将该值设置回无,但可以继续正常更新它
-
当
[Consultation Notes]为Null 时,它不等于"'" & DocumentList.Column(3) & "'"我认为如果您将自动编号主键ID 添加到@,您的任务会更简单987654330@ 表。然后在列表框中包含ID(不必可见),并在WHERE子句中使用该值来定位您要更新的行。这应该比您现在拥有的WHERE子句更简单,并且避免“Null 永远不等于任何东西,甚至不等于另一个 Null”的复杂性。还要考虑UPDATE的参数查询 -
@HansUp 非常感谢您通知我;我认为空字段与空字符串的值相同,例如"";我想这就是问题所在。您的替代解决方案帮助很大,也简化了我的代码,因为我不需要所有那些 WHERE 子句,只需要一个。如果您想将其作为答案,我可以随意接受
标签: ms-access listbox vba sql-update