通过表访问VBA循环以添加新的

此表与源表和目标表的列名匹配。

通过表访问VBA循环以添加新的

我想将记录从源表转移到目标表,如下所示。

configure headers

有没有一种方法可以遍历上面匹配表中的记录,这样我就不需要键入所有 Dim Con_Dest As New ADODB.Connection Dim Con_Sour As New ADODB.Connection Dim Rs_Sour As New ADODB.Recordset Dim Rs_Dest As New ADODB.Recordset Dim Str_SqlSour As String Dim Str_SqlDest As String Dim Str_Sql As String Con_Sour.Open "dsn=xxxx;uid=xxxx;pwd=xxxxx" Con_Dest.Open "dsn=yyyyy;uid=yyyyy;pwd=yyyyyy" Str_SqlSour = "select * from Table_Sour" Rs_Sour.Open Str_SqlSour,Con_Sour Rs_Dest.Open "Table_Dest",Con_Dest,adOpenDynamic,adLockOptimistic Rs_Sour.MoveFirst Do Until Rs_Sour.EOF With Rs_Dest .AddNew .Fields("AAA").Value = Rs_Sour.Fields("id") .Fields("AAB").Value = Rs_Sour.Fields("target_id") .Fields("AAC").Value = Rs_Sour.Fields("group_code") ..... .Update End With Rs_Sour.MoveNext Loop 了?

anita999 回答:通过表访问VBA循环以添加新的

是的,可以。一种方法是使用源字段和目标字段创建二维数组。我已修改您的代码以包含此方法。 myFields()数组保存字段名称。无论列出的字段数是多少,这都会循环遍历您的字段名表中的所有字段名。

    Dim Con_Dest As New ADODB.Connection
    Dim Rs_Sour As New ADODB.Recordset
    Dim Rs_Dest As New ADODB.Recordset
    Dim Rs_Fields As New ADODB.Recordset,rsCount As Integer
    Dim myFields() As String

    Dim Str_SqlSour As String
    Dim Str_SqlDest As String

    Dim Str_Sql As String

    Con_Sour.Open "dsn=xxxx;uid=xxxx;pwd=xxxxx"
    Con_Dest.Open "dsn=yyyyy;uid=yyyyy;pwd=yyyyyy"


    rsCount = 0

    Rs_Fields.Open "matchingFields",Con_Dest

    Rs_Fields.MoveFirst
    Do Until Rs_Fields.EOF
        rsCount = rsCount + 1
        Rs_Fields.MoveNext
    Loop


    ReDim myFields(1 To rsCount,1 To 2) As String



    i = 1

    Rs_Fields.MoveFirst
    Do Until Rs_Fields.EOF

        myFields(i,1) = Rs_Fields.fields("col_sour").Value
        myFields(i,2) = Rs_Fields.fields("col_dest").Value
        i = i + 1
        Rs_Fields.MoveNext
    Loop


    Str_SqlSour = "select * from Table_Sour"

    Rs_Sour.Open Str_SqlSour,Con_Sour
    Rs_Dest.Open "Table_Dest",Con_Dest,adOpenDynamic,adLockOptimistic

    Rs_Sour.MoveFirst
    Do Until Rs_Sour.EOF

        With Rs_Dest
            .AddNew

            For i = 1 To UBound(myFields)
                Rs_Dest.fields(myFields(i,2)).Value = Rs_Sour.fields(myFields(i,1)).Value
            Next i

            .Update
        End With

        Rs_Sour.MoveNext
    Loop

ADO中的记录计数方法对我来说一直都是错误的。 DAO在我的大多数记录集工作中似乎更易于使用。我已经测试了我发布的内容,并且可以正常工作。

,

这与Rs_MATC作为匹配表的DAO记录集一起工作。

Dim Con_Dest As New ADODB.Connection
Dim Con_Sour As New ADODB.Connection
Dim Rs_Sour As New ADODB.Recordset
Dim Rs_Dest As New ADODB.Recordset
Dim Rs_MATC As DAO.Recordset

Dim Str_SqlSour As String
Dim Str_SqlDest As String

Con_Sour.Open "dsn=xxxx;uid=xxxx;pwd=xxxx"
Con_Dest.Open "dsn=yyyy;uid=yyyy;pwd=yyyy"

Str_SqlSour = "select * from Table_Source"

Rs_Sour.Open Str_SqlSour,Con_Sour
Rs_Dest.Open "Table_Dest",adLockOptimistic

Set Rs_MATC = CurrentDb.OpenRecordset("select * from Table_Matching")

Rs_Sour.MoveFirst
Do Until Rs_Sour.EOF

    With Rs_Dest
        .AddNew

        Rs_MATC.MoveFirst
        Do Until Rs_MATC.EOF

            Rs_Dest.Fields(Rs_MATC.Fields("Col_Dest").Value).Value = Rs_Sour.Fields(Rs_MATC.Fields("Col_Sour").Value).Value

            Rs_MATC.MoveNext
        Loop

        .Update
    End With

    Rs_Sour.MoveNext
Loop
本文链接:https://www.f2er.com/2718069.html

大家都在问