【问题标题】:How do I loop through a MS Access recordset with VBA and assign variables to the results?如何使用 VBA 循环访问 MS Access 记录集并将变量分配给结果?
【发布时间】:2013-02-05 16:11:42
【问题描述】:

我的 VBA 很生锈,我似乎在画一个空白。如果重要的话,我正在使用 MS Access 2010。

我有一个查询的结果,它返回两个字段(Field1 是文本,Field2 是双精度)和五个记录,我想根据 Field1 中的内容将 Field2 值分配给五个不同的变量。对我来说,这是某种案例陈述 - 我将如何在记录集上的 VBA 中执行此操作?

  Private Sub test()

  Dim myRS As DAO.Recordset
  Dim db As Database
  Dim strSQL As String
  Dim v1, v2, v3, v4, v5 As Double

  ' Pretend strSQL is a different query that gives five records

  Set dbs = CurrentDb
  strSQL = "SELECT Field1, BigNumber FROM tmp1"
  Set myRS = dbs.OpenRecordset(strSQL)

  Do While Not myRS.EOF
      v1 = ?         ' I want v1 = Field2 when Field1="A"
      v2 = ?         ' I want v2 = Field2 when Field1="B"
      v3 = ?         ' I want v3 = Field2 when Field1="C"
      v4 = ?         ' I want v4 = Field2 when Field1="D"
      v5 = ?         ' I want v5 = Field2 when Field1="E"
  Loop

  End Sub

非常感谢!

【问题讨论】:

  • 你对变量 v1-v5 做了什么?我想我有一个比遍历数据集更好的解决方案,但我需要知道最终游戏是什么才能确定。

标签: variables ms-access loops vba assign


【解决方案1】:

我觉得你不见了MoveNext:

Do While Not rec.EOF
    rec.MoveNext
Loop

【讨论】:

    【解决方案2】:
    Private Sub test()
    
    Dim myRS As DAO!Recordset
    Dim db As Database
    Dim strSQL As String
    Dim v1, v2, v3, v4, v5 As Double
    
    ' Pretend strSQL is a different query that gives five records
    
    Set dbs = CurrentDb
    strSQL = "SELECT Field1, BigNumber FROM tmp1"
    Set myRS = dbs!OpenRecordset(strSQL)
    
    Do While Not myRS!EOF
        Select Case myRS.Fields(0)
        Case "A"
            v1 = myRS.Fields(1)
        Case "B"
            v2 = myRS.Fields(1)
        Case "C"
            v3 = myRS.Fields(1)
        Case "D"
            v4 = myRS.Fields(1)
        Case "E"
            v5 = myRS.Fields(1)
        End Select
    Loop
    

    【讨论】:

    • 您好,我收到一条错误消息,指出 Field1 是无法找到的方法或数据成员。
    • 我必须删除 !从代码来看有问题吗?它仍然给我同样的错误。
    【解决方案3】:

    在这种情况下,您不妨只使用 DlookUp 而忘记记录集:

     v1 = DLookUp("BigNumber","tmp1","Field1='A'")
     v2 = DLookUp("BigNumber","tmp1","Field1='B'")
    
     <...>
    

    【讨论】:

    • 嗯,问题是我的SQL语句比从一张表中提取数据要复杂得多,我只是为了简化问题。
    • 如果你的sql比较复杂,应该可以构建成返回5列,或者以明确的方式返回数据。几乎任何事情都比走记录集要好。
    • 如果我返回五列,那么我仍然需要将结果分配给五个变量,或者我只需进行 5 次查询并将结果分配给变量——这是肯定的。
    • 如果你返回 5 列,你不是在遍历一个记录集,v1=col1,v2=col2,打字少了很多。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多