如何解决更新现有记录和添加在表新记录 - 只有一个记录被更新MS访问VBA
我最近读这篇文章:Updating existing records and adding new records in table (MS Access VBA)
一个深思熟虑和优雅的解决方案,但在我的实现,只有tblTempData表的第一个记录被添加(或更新如果存在)向tblCommon表
从原始讯息的完整代码是:
Option Explicit
Private rsCommon As DAO.Recordset
Public Sub UpdateExistingRecords()
On Error GoTo ErrTrap
Dim rs As DAO.Recordset
Set rs = CurrentDb().OpenRecordset("SELECT * FROM tblTempData",dbOpenSnapshot)
Set rsCommon = CurrentDb().OpenRecordset("SELECT * FROM tblCommon",dbOpenDynaset)
Dim idx As Long
For idx = 1 To rs.RecordCount
If ExistsInCommon(rs![Item ID]) Then
If Not Update(rs) Then
MsgBox "Failed to update.",vbExclamation
GoTo Leave
End If
Else
If Not Add(rs) Then
MsgBox "Failed to add.",vbExclamation
GoTo Leave
End If
End If
rs.MoveNext
Next
Leave:
If Not rs Is nothing Then rs.Close
If Not rsCommon Is nothing Then rsCommon.Close
Set rs = nothing
Set rsCommon = nothing
Exit Sub
ErrTrap:
MsgBox Err.Description,vbCritical
Resume Leave
End Sub
' Exists - 'Assumes Id is String
Private Function ExistsInCommon(ByVal Id As String)
ExistsInCommon = DCount("*","tblCommon","[Item ID] = '" & Id & "'") > 0
End Function
' Update
Private Function Update(rs As DAO.Recordset) As Boolean
With rsCommon
.FindFirst "[Item ID] = '" & rs![Item ID] & "'"
If .NoMatch Then Exit Function
.Edit
![Item Description] = rs![Item Description]
![Material Number] = rs![Material Number]
![User] = rs![User]
![supplier] = rs![supplier]
![Current Status] = rs![Current Status]
![Remarks] = rs![Remarks]
.Update
.MoveFirst
End With
Update = True
End Function
'Add
Private Function Add(rs As DAO.Recordset) As Boolean
With rsCommon
.AddNew
![Item Description] = rs![Item Description]
![Material Number] = rs![Material Number]
![User] = rs![User]
![supplier] = rs![supplier]
![Current Status] = rs![Current Status]
![Remarks] = rs![Remarks]
![Item ID] = rs![Item ID]
.Update
End With
Add = True
End Function
经过进一步审查,我认为 tblTempData 的记录计数代码存在问题
Dim rs As DAO.Recordset
Set rs = CurrentDb().OpenRecordset("SELECT * FROM tbl_kpi_data_temp",dbOpenSnapshot)
Set rsCommon = CurrentDb().OpenRecordset("SELECT * FROM tbl_kpi_data_leonardo",dbOpenDynaset)
Dim idx As Long
For idx = 1 To rs.RecordCount
当我的 tblTempData 中有更多记录时,这对我来说返回 1。如果我用固定值(用于测试目的)代替rs.RecordCount我得到的余与添加或更新预期固定值硬编码的记录数。
有什么想法吗?
非常感谢
解决方法
将 rs 作为 动态集 打开并执行 MoveLast 和 MoveFirst 以获取记录计数。
或者,对查询使用更简单的方法:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。