迭代Recordset循环中的ADODB字段

ton*_*mke 4 vb6 ms-access vba ado access-vba

我正在尝试创建一个函数,该函数接受ADODB Recordset并将其数据复制到新的记录集中.

为此,我使用do循环遍历源记录集的每一行.在do循环中,我需要使用每个循环来遍历每一行的Fields集合,以捕获其数据.

但是,VB6似乎在为每个循环阻塞- 它突出显示for循环迭代器的名称(下例中的"fld")并抛出一个未定义变量错误.

奇怪的是,当没有放在do循环中时,每个循环完全相同.

测试用例1 (无法定义"For Each fld"):

'targetTableName As String:要创建的新表的名称'sourceRecordSet As ADODB.Recordset:包含要发布到新targetTableName的结果的open recordset

Public Sub createTableFromRecordset(targetTableName As String, sourceRecordSet As ADODB.recordSet)
        '(irrelevant code omitted)

        'create MDB RS object
        Dim targetRecordSet As ADODB.recordSet
        Set targetRecordSet = mdbQuery("select * from targetTableName;")

        'write data to recordset
        sourceRecordSet.MoveFirst ' to be safe
        targetRecordSet.MoveFirst ' to be safe
        While Not sourceRecordSet.EOF
            targetRecordSet.AddNew
            For Each fld In sourceRecordSet.Fields 'fails here, hilighting fld
                'do work
            Next fld
            sourceRecordSet.MoveNext
        Loop

        '(irrelevant code omitted)            

End Sub
Run Code Online (Sandbox Code Playgroud)

测试用例2 (能够定义"For Each fld"就好了):

Private Sub testCase2()
    'Create a source dataset
    Dim sourceRs As ADODB.Recordset
    Set sourceRs = functionThatGetsRecordset("(a query)")

    'Create target db conn
    Dim mdbConn As ADODB.Connection
    Set mdbConn = functionThatGetsConn()

   'iterate through source's fields
    For Each fld In sourceRs.Fields 'works fine
        'do work 
    Next fld
End Sub
Run Code Online (Sandbox Code Playgroud)

Bla*_*awk 5

尝试两件事:

  1. 使用不同的变量名称只是为了安全起见."字段"是类型的名称,可能会使您和VBA混淆.相反,我建议使用"fldField"或"tempField"或其他类似的东西.
  2. 在"For Each"行之前,通过Dimming来创建循环变量:

Dim fldField As Field