【问题标题】:Looping through Table Records to Update another Tables Records based on a Key Identifier循环遍历表记录以根据键标识符更新另一个表记录
【发布时间】:2014-05-22 22:28:45
【问题描述】:

我一直有这个查询的问题,说没有记录,但我知道有,因为我正在查看表格。我想通过单击一个按钮来遍历一个表以根据一些参数查找某些列信息。

因此,当我单击按钮时,它将循环遍历表一,根据 ID 找到我需要的字段,并使用这些字段更新另一个表。

Private Sub GetResults_Click()
  Dim strSQL As String
  Dim SQL As String
  Dim dba As Database
  Dim tbl As Recordset
  Dim rst1 As Recordset
  Dim tstdt As Date

  tstdt = Me.Date.Value

  Set dba = CurrentDb
  Set tbl = dba.OpenRecordset("tbl_Results", dbOpenDynaset, dbSeeChanges)

  strSQL = "SELECT * FROM tbl_Results"
  Set tbl = dba.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)

  If Not tbl.EOF Then
    With tbl
      .MoveFirst
      Do Until tbl.EOF
        Call getDataRecords(tbl!SystemAssignedPersonID, tstdt)
        .MoveNext
      Loop
    End With
  End If

  Set rst1 = Nothing
  Set tbl = Nothing
  Set dba = Nothing

End Sub

Function getDataRecords(PersonID As Variant, TestDate As Date)
  Dim dba As Database
  Dim rst As Recordset
  Dim rst1 As Recordset
  Dim SQL As String

  Set dba = CurrentDb
  Set rst = dba.OpenRecordset("tbl_Results", dbOpenDynaset, dbSeeChanges)
  Set rst1 = dba.OpenRecordset("dbo_tbl_Random", dbOpenDynaset, dbSeeChanges)
  SQL = "SELECT * FROM dbo_tbl_Random WHERE SystemAssignedPersonID = " & PersonID & " AND Date = " & Date & " AND MenuUsed = 'RandomResult'"

  Set rst1 = dba.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)

  rst.AddNew
  rst.Fields("FileSent") = rst1!FileSent
  rst.Fields("Result") = rst1!Result
  rst.Update

End Function

在我发疯之前帮忙!谢谢!

【问题讨论】:

    标签: sql database vba loops ms-access


    【解决方案1】:

    你在这里把事情复杂化了。所有这些都可以在 1 个 SQL 语句中完成

    Update tbl_Results as Res
    Inner join dbo_tbl_Random as rand 
     on Res.PersonID = Rand.SystemAssignedPersonID and Res.[Date] = Rand.[Date] 
    set Res.FileSent = Rand.FileSent ,
     Res.Result = Rand.Result
    Where Rand.MenuUsed = 'RandomResult'
    

    你可以这样执行

    dim sql as string
    sql = "Update tbl_Results as Res " & _
    "Inner join dbo_tbl_Random as rand  " & _
    " on Res.PersonID = Rand.SystemAssignedPersonID and Res.[Date] = Rand.[Date]  " & _
    "set Res.FileSent = Rand.FileSent , " & _
    " Res.Result = Rand.Result " & _
    " Where Rand.MenuUsed = 'RandomResult' "
    CurrentDb.Execute(sql)
    

    更新:

    这就是我期望您的表格设置的方式

    tbl_results

    dbo_tbl_Random

    我如何在设计器中设置查询以确认它正在工作

    【讨论】:

    • 我是否还需要包括我的电话才能打开表格。
    • 不。根本不需要使用记录集。您应该将该代码放在查询设计器中以测试结果。您想确认它确实在更新您希望它更新的内容。
    • 这在 Access VBA 中不起作用。它不断给我和错误:Set 上的预期语句结束??
    • 我不需要查询来更新该列的所有项目,每个 ID 号都会有不同的结果。它不是这样工作的,我需要 VBA 答案而不是 SQL
    • 终于!!谢谢您的帮助。它自己解决了。 SQL 语句的表名倒序了,不知道这是怎么发生的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多