我的工作中有一个项目有问题。我在Sharepoint上有数据库。它被链接到.accdb文件(Access 2007/2010)。到目前为止,我使用ADODB连接标准ConnectionString (仅提供程序-ACEDB12.0)。
当我试图从数据库中的一个多值字段中获取数据时,该列的记录集为空。示例:
我必须得到几个列: ID,位置,名称,人员(MVF),培训师(MVF)。
当人员列中的单个记录有超过3-4个值时,该列的记录集为空。如果小于3-4个值,我将得到分号分隔的值(即使是一个左JOIN语句来获取MVF的源数据也没有任何区别)
我正在使用Excel --最终用户只使用Excel。
当我看到一个记录集-它有空值,当人们的价值观应该放置-基于此,我认为问题是由类型的连接或其他什么。我也尝试过DAO连接-没有积极的结果。
我还尝试在.accdb文件中创建一个临时数据库,只执行SQL (插入到tmpDB中,从inputDB中选择人员;--这是一个伪代码,语法很好),然后我得到“无法为多值字段执行插入”。
我知道,不建议使用MVF,但它是一个SharePoint DB,我的角色只是从数据库获取数据到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总是空的。
发布于 2016-04-01 13:00:54
我解决了这个问题。这就是我所做的。代码可能有语法错误。我在这里发布的代码是从我的记忆-这不是我的工作代码的副本。
的主要也是最重要的是连接的类型。经过研究发现,微软推荐使用ADO连接。正如我在前面发布的,DAO需要通过记录集进行额外的循环,这可能是一个问题,使用带有连接字符串的DAO看起来并不比ADO好。
从MVFs获取数据的最好和唯一的方法是DAO,但是连接必须通过"OpenDatabase“方法获得--在这种情况下,MVF中有大量值的MVF没有问题。
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
https://stackoverflow.com/questions/36344191
复制相似问题