【问题标题】:ADODB Recordset cannot get whole multivalued field from AccessADODB 记录集无法从 Access 获取整个多值字段
【发布时间】:2016-03-31 21:30:36
【问题描述】:

我的工作中有一个项目有问题。我有一个关于 Sharepoint 的数据库。它已连接到 .accdb 文件 (Access 2007/2010)。到目前为止,我使用 ADODB Connection 和标准 ConnectionString(仅限 Provider - ACEDB 12.0)。

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

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

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

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

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

我还尝试在 .accdb 文件中创建一个临时数据库,仅用于执行 SQL(INSERT INTO tmpDB SELECT People FROM inputDB;-这是一个伪代码,语法很好)然后我得到“无法执行 INSERT INTO 表示多值字段”。

我知道,不推荐使用 MVF,但它是 SharePoint DB,我的角色只是将数据从 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 始终为空。

【问题讨论】:

  • 您是否尝试过使用 Access ODBC 驱动程序而不是 OLEDB 驱动程序,看看效果是否更好?
  • 它会有所帮助。我明天去看看。

标签: excel vba ms-access sharepoint


【解决方案1】:

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

主要和最重要的是连接类型。 经过研究,我发现微软推荐使用 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

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2018-05-10
    • 2020-12-26
    相关资源
    最近更新 更多