使用带有记录集的 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 存储过程的多个结果集?

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075

带有 ADODB 记录集的 MS Access ListBox 列属性创建错误 424 需要对象