使用带有记录集的 Access VBA 和 SQL 添加和删除记录
Posted
技术标签:
【中文标题】使用带有记录集的 Access VBA 和 SQL 添加和删除记录【英文标题】:Adding and Deleting a record using Access VBA and SQL with Recordsets 【发布时间】:2019-08-08 00:11:38 【问题描述】:我正在尝试检查我的表单复选框,如果为真,我需要检查记录是否存在,然后,如果它存在并且为真 - 什么也不做。如果为真且不存在 - 添加记录。 如果 False - 我还需要检查它是否存在,如果存在 - 删除它,如果不存在 - 什么也不做。
我试过只使用记录集并循环遍历表。 我也尝试过使用 DLookup,只是因为需要三个标准值来查找记录而迷失了方向。 现在我尝试同时使用记录集和 SQL 并不断收到错误“参数太少”。
RT = "Rise Time"
If Me.RiseTime.Value = True Then
strSQL = "SELECT * FROM Weekly_StartTime_Challenges WHERE UserID = '" &
Me.UserID.Value & "' AND WeekNumber = '" & Me.WeekNumber.Value
& "' AND StartTimeAction =" & RT
Set sast = db.OpenRecordset(strSQL, dbOpenDynaset)
If Not sast.EOF And sast.BOF Then
' It Does Exist and Do Nothing
Else
sast.AddNew
sast!WeekNumber = Me.WeekNumber.Value
sast!StartDate = Me.StartDate.Value
sast!UserID = Me.UserID.Value
sast!FullName = Me.FullName.Value
sast!Index = 1
sast!Tab1 = 8
sast!StartTimeAction = RT
sast.Update
End If
Else
strSQL = "SELECT * FROM Weekly_StartTime_Challenges WHERE UserID = '" &
Me.UserID.Value & "' AND WeekNumber = '" & Me.WeekNumber.Value & "' AND
StartTimeAction = RT"
Set sast = db.OpenRecordset(strSQL, dbOpenDynaset)
If Not sast.EOF And sast.BOF Then
' It Does Exist and needs deleted
sast.Delete
Else
End If
End If
【问题讨论】:
我怀疑 Weeknumber 是文本,什么值持有 RT? 与 UserID 相同。是文字吗? 【参考方案1】:一步一步来。例如,如果您要检查记录是否存在:
If DCount("ColumnName", "TableName", "ID = 4") = 0 Then
MsgBox "No Record Found"
'Do stuf
Else
MsgBox "Record/Records found"
'Do other stuf
End If
如果您找到一条记录,您可以使用记录集循环遍历它:
Dim rs As RecordSet
Set rs = CurrentDb.OpenRecordset("Select * From Table", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
If "You want to Update the record" = True Then 'Apply your update condition
rs.Edit
rs.ID = 4 'Change ID
rs.Name = "New Name" 'Change Name
rs.Update
Else
'Do other stuf
End If
rs.MoveNext
Loop
rs.close
Set rs = Nothing
要更改数据行,您始终需要记录集rs.Edit
,最后需要rs.Update
。
【讨论】:
以上是关于使用带有记录集的 Access VBA 和 SQL 添加和删除记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBA (MS Access) 中的 bigint 字段更新 SQL 表
Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单
在 Access-VBA 中使用 SQL 查询仅创建非重复记录
使用 vba 在 MS-Access 前端中来自 MySQL 存储过程的多个结果集?