我在这一个完全难住了..跳到底部阅读问题UPDATE SET WHERE部分工作列表框 - Microsoft Access中VBA
这里是我的列表框(DocumentList),其采用从“领域文件'表:
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事件设置,以便当您从列表框中选择一行时,它的每个字段分配到一个文本框/组合框。
文本框/组合框的名字:为每一个在 'DocumentList' click事件
txtDocument
StatusCombo
txtNotes
txtConNotes
代码:将数据从列表框中赋予它们
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
我的问题是代码只适用于2出的文件3。代码的所有方面都起作用,但仅限于某些文档。这对我来说没有任何意义。起初我以为这可能是拼写错误,但即使是,没有一个文件应该得到更新。但他们中的一些,1不..
任何想法,为什么这个代码更新的一些文件,但不更新其他人?
将'UPDATE'语句文本存储在字符串变量* strUpdate *中。然后添加'Debug.Print strUpdate'并像下面这样执行它:'CurrentDb.Execute strUpdate,dbFailOnError' Access会给你提供关于失败更新的更多信息吗? – HansUp
我找到了这个错误..有些文件没有在最后一个字段'Consultation Notes'中存储任何内容。这些文件是我无法更新的文件。但是,如果我直接将值放入该表字段中,则尝试从其工作的表单中更新它们。我不明白的是;然后我可以将该值设置为无效,但可以继续正常更新 – Alex
当[[Consultation Notes]]为空时,它不等于'''“&DocumentList.Column(3)&”'“'如果将自动编号主键* ID *添加到'[Documents]'表格中,我认为您的任务会更简单。然后在列表框中包含* ID *(不必是可见的),并在WHERE子句中使用该值来定位要更新的行。这应该比现在的WHERE条款更简单,避免“空不等于任何东西,甚至不是另一个空”的复杂性。还要考虑'UPDATE'参数查询 – HansUp