当前,我已创建此代码,以将ADODB记录集转换为VBA中的MS-accESS DAO记录集。
还有更好的方法吗?通过这种方法,我在MS-accESS文件中创建了一个临时表,此代码从该表开始执行。该表具有与源记录集相同的字段汇总,并从ADODB记录集中插入数据。然后使用SELECT sql,我从该临时表中获取数据作为DAO记录集。
我的VBA代码
Private Function ConvertRecordset_ADODB_to_DAO(rsADODB As ADODB.Recordset,Optional LimitRowCount As Integer = 100) As DAO.Recordset
Dim Rs As ADODB.Recordset
Set Rs = rsADODB
Dim daoDBE As DAO.DBEngine
Dim daoWS As DAO.Workspace
Dim daoDB As DAO.Database
Dim daoTABLE As DAO.TableDef
Dim myFIELD As Field
Dim myINDEX As Index
Dim DB99 As Database
Dim RS99 As Recordset
vRs = "TempTable_99999"
With CurrentDb
For i = 0 To .TableDefs.Count - 1
If .TableDefs(i).Name = vRs Then
.TableDefs.Delete (vRs)
Exit For
End If
Next
End With
Set daoTABLE = CurrentDb.CreatetableDef(vRs)
Dim fName As String
With daoTABLE
For i = 0 To Rs.Fields.Count - 1
fName = Rs.Fields(i).Name
.Fields.Append .CreateField(fName,dbText)
Next
End With
CurrentDb.TableDefs.Append daoTABLE
Dim r As DAO.Recordset
Set r = CurrentDb.OpenRecordset("select * from " & vRs)
Dim rCount As Integer
With Rs
Do Until .EOF
r.AddNew
For i = 0 To .Fields.Count - 1
r.Fields(i).Value = .Fields(i).Value
Next
r.Update
rCount = rCount + 1
If rCount >= LimitRowCount Then Exit Do
.MoveNext
Loop
End With
Rs.Close
r.Close
DoEvents
Set r = CurrentDb.OpenRecordset("select * from " & vRs)
Set ConvertRecordset_ADODB_to_DAO = r
End Function