Excel ADODB记录集无法从Access获取整个多值字段
我的工作中有一个项目有问题。我在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驱动程序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源数
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驱动程序来查看它是否工作得更好?这可能会有所帮助。我明天去检查一下。