Une itération à travers ADODB Champs à l'intérieur d'un jeu d'enregistrements en boucle

Je cherche à créer une fonction qui prend un ADODB jeu d'enregistrements et copies de ses données dans un nouveau jeu.

Pour ce faire, j'utilise un ne boucle pour parcourir chaque ligne d'une source de jeu d'enregistrements. À l'intérieur de cette boucle, j'ai besoin d'utiliser pour chaque boucle pour se déplacer à travers chaque ligne de la collection de Champs, afin de saisir ses données.

Cependant, VB6 semble s'étouffer sur le pour chaque boucle - elle met en évidence le nom de la boucle for
s itérateur ("fld" dans l'exemple ci-dessous) et jette un variable non définie erreur.

Curieusement, c'est exactement le même pour chaque boucle fonctionne très bien lorsqu'il n'est pas placé à l'intérieur d'un ne boucle.

Cas de Test 1 (incapables de définir "Pour Chaque fld"):

'targetTableName Comme une Chaîne de caractères: nom de la nouvelle table à créer
'sourceRecordSet Comme ADODB.Jeu d'enregistrements: ouvrir le jeu d'enregistrements contenant les résultats de publier la nouvelle targetTableName

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

Cas de Test 2 (capable de définir des "Pour Chaque fld" très bien):

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
Même problème. J'ai simplement appelé "Champ" pour supprimer le nom de l'entreprise dans l'unité réelle - je vais renommer dans les exemples
RE la dernière révision de votre question, avez-vous des Dim fld As ADODB.Field quelque part?
Non, il n'est pas explicitement défini fld dans les deux cas.
Et qu'advient-il si vous ajoutez Dim fld As ADODB.Field?
Fonctionne comme prévu. Toutes mes excuses, c'est différent pour la prochaine comportement dans d'autres langues que j'ai utilisé. Présenter que comme une réponse ci-dessous et de recueillir votre sweet sweet karma 🙂

OriginalL'auteur Tony | 2014-04-07