Да, вы можете. Один из способов - создать двумерный массив с полями источника и назначения. Я изменил ваш код, чтобы включить этот метод. Массив myFields () содержит имена полей. Это будет l oop через все имена полей в вашей таблице имен полей, независимо от количества перечисленных полей.
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 кажется более простым в использовании для большинства моих записей. Я проверил то, что я отправил, и это работает.