首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ADODB记录集无法从Access获得整个多值字段

ADODB记录集无法从Access获得整个多值字段
EN

Stack Overflow用户
提问于 2016-03-31 21:30:36
回答 1查看 1.1K关注 0票数 0

我的工作中有一个项目有问题。我在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驱动程序..。

代码语言:javascript
运行
复制
objConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & myconn & ";Uid=Admin;Pwd=;"

..。而不是OLEDB提供者..。

代码语言:javascript
运行
复制
objConn.Provider = "Microsoft.ACE.OLEDB.12.0"
objConn.Open myconn

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

EN

回答 1

Stack Overflow用户

发布于 2016-04-01 13:00:54

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

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

从MVFs获取数据的最好和唯一的方法是DAO,但是连接必须通过"OpenDatabase“方法获得--在这种情况下,MVF中有大量值的MVF没有问题。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36344191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档