Excel ADODB记录集无法从Access获取整个多值字段

Excel ADODB记录集无法从Access获取整个多值字段,excel,vba,ms-access,sharepoint,Excel,Vba,Ms Access,Sharepoint,我的工作中有一个项目有问题。我在Sharepoint上有一个数据库。它连接到.accdb文件(Access 2007/2010)。到目前为止,我使用了ADODB连接和标准ConnectionString(仅提供程序-ACEDB12.0) 当我试图从数据库中的一个多值字段获取数据时,该列的记录集为空。例如: 我必须得到几个列:ID、位置、姓名、人员(MVF)、培训师(MVF) 当“人员”列中的单个记录的值超过3-4时,此列的记录集为空。如果少于3-4个值,我将得到分号分隔的值(即使是获取MVF源数

我的工作中有一个项目有问题。我在Sharepoint上有一个数据库。它连接到.accdb文件(Access 2007/2010)。到目前为止,我使用了ADODB连接和标准ConnectionString(仅提供程序-ACEDB12.0)

当我试图从数据库中的一个多值字段获取数据时,该列的记录集为空。例如:

我必须得到几个列:ID、位置、姓名、人员(MVF)、培训师(MVF)

当“人员”列中的单个记录的值超过3-4时,此列的记录集为空。如果少于3-4个值,我将得到分号分隔的值(即使是获取MVF源数据的左JOIN语句也没有任何区别)

我正在使用Excel-最终用户只使用Excel

当我观察一个记录集时——当人们的值应该被放置时,它有空值——基于此,我认为问题是由连接类型或其他原因引起的。我也尝试过DAO连接-没有积极的结果

我还尝试在.accdb文件中创建一个临时数据库,仅用于执行SQL(插入tmpDB,从inputDB中选择人员;-这是一个伪代码,语法很好),然后我得到了“无法对多值字段执行插入”

我知道,不建议使用MVF,但它是一个SharePoint数据库,我的角色只是将数据从数据库获取到Excel

更新

我尝试使用ODBC驱动程序

objConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & myconn & ";Uid=Admin;Pwd=;"
。。。而不是OLEDB提供程序

objConn.Provider = "Microsoft.ACE.OLEDB.12.0"
objConn.Open myconn

。。。但是现在MVF总是空的。

我解决了这个问题。这就是我所做的。代码可能有语法错误。我在这里发布了我记忆中的代码——它不是我工作代码的副本

最主要也是最重要的是连接的类型。研究之后,我发现Microsoft建议使用ADO连接。正如我之前所发布的,DAO需要通过记录集进行额外的循环,这可能是一个问题,使用带有连接字符串的DAO看起来并不比ADO好

从MVFs获取数据的最佳且唯一的方法是DAO,但连接必须通过“OpenDatabase”方法获得——在这种情况下,具有大量值的MVFs没有问题

Sub ImportMVFs()

 Dim dbs As DAO.Database
 Dim rsRecord As DAO.Recordset
 Dim rsChild As DAO.Recordset
 Dim strSQL As String
 Set dbs = "Path to database - works with .accdb too"
 Set db = ws.OpenDatabase(dbs) 'This type of connection is a best way to import from MVF.

 strSQL = "SELECT * FROM tblToImport;"
 Set rsRecord = db.OpenRecordset(strSQL)
 Debug.Print rsRecord.Field("Column1").Value
 Debug.Print rsRecord.Field("Column2").Value

 Do Until rsRecord.EOF

      Set rsChild = rsRecord.Field("MultiValuedFieldColumn") 

      Do Until rsChild.EOF
        Debug.Print rsChild.Field(0).Value 'We have to iterate through all mvfs
        'Here it's possible to make a temporary table in Access to reorganize MVFs into simple records
        'For example: Using SQLQuery as SQL string with Execute method.

        db.Execute SQLQuery
        rsChild.MoveNext
      Loop

      rsRecord.MoveNext

 Loop

 rsRecord.Close


 Set rsRecord = Nothing
 Set dbs = Nothing

End Sub

您是否尝试过使用Access ODBC驱动程序而不是OLEDB驱动程序来查看它是否工作得更好?这可能会有所帮助。我明天去检查一下。