我的工作中有一个项目有问题。我有一个关于Sharepoint的数据库。它被挂钩到.accdb文件(Access 2007/2010)。到目前为止,我使用ADODB Connection与标准ConnectionString(只有Provider - ACEDB 12.0)。
当我尝试从数据库中的多值字段中获取数据时,该列的记录集为空。例如:
我必须得到几个列:ID,位置,名称,人物(MVF),培训师(MVF)。
当People列中的单个记录超过3-4个值时 - 此列的记录集为空。如果少于3-4个值,我将得到以分号分隔的值(即使是LEFT JOIN语句来获取MVF的源数据也没有任何区别)
我正在使用Excel - 最终用户只使用Excel。
当我观看Recordset时 - 当应该放置人们的值时它有空值 - 基于此我认为问题是由连接类型或其他原因造成的。我也试过DAO连接 - 没有积极的结果。
我还尝试在.accdb文件中创建一个临时数据库,只执行SQL(INSERT INTO tmpDB SELECT People FROM inputDB; -it是伪代码,语法很好)然后我得到“无法执行INSERT INTO为多值字段“。
我知道,建议不要使用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总是空的。
答案 0 :(得分:0)
我解决了这个问题。这就是我所做的。代码可能有语法错误。我在这里发布了从我的记忆中写下的代码 - 它不是我工作代码的副本。
主要和最重要的是连接类型。在研究后,我发现Microsoft建议使用ADO连接。正如我之前发布的那样,DAO需要通过记录集进行额外的循环,这可能是一个问题,使用带有连接字符串的DAO看起来并不比ADO好。
从MVF获取数据的最佳和唯一方法是DAO,但连接必须由" OpenDatabase"方法 - 在这种情况下,具有大量值的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