在VBA中将ADODB记录集转换为DAO记录集

当前,我已创建此代码,以将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
phoneix_l 回答:在VBA中将ADODB记录集转换为DAO记录集

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2429672.html

大家都在问