【问题标题】:Import Queries from Access从 Access 导入查询
【发布时间】:2016-08-27 02:32:36
【问题描述】:

我通过 VBA 将 Access 数据库连接到 Excel,将数据从单个表 "Category" 导入到工作表。下面的代码,但是,而不是表,我可以导入数据库中已经存在的查询吗?
当我在第 15 行将表名称更改为查询名称时,它显示“错误”。

    'connection Declairation
    Dim conn As ADODB.Connection
    Dim data As ADODB.Recordset

    Set conn = New ADODB.Connection
    Set data = New ADODB.Recordset
    ' end of connection Declairation
    conn.ConnectionString = ConstrAccess

    conn.Open
    On Error GoTo closeconnection
                With data
                    .ActiveConnection = conn 'specfied the connection
                    .Source = "Category" ' works only for Table Type
                    .LockType = adLockReadOnly
                    .CursorType = adOpenForwardOnly
                    .Open
                End With
                On Error GoTo closerecordset


                Datasheet.Range("a2").CopyFromRecordset data
                On Error GoTo 0



closerecordset:
                data.Close
closeconnection:
    conn.Close


End Sub

【问题讨论】:

  • 我无法重现您的问题。一个命名的、存储的查询适用于我:Excel 2013、Win 10、MS ActiveX 6.1 库参考。您收到的错误是什么?
  • 你可以试试这个 - Data > From Access > 选择 Access 文件 > 如果你没有在列表中看到你的查询,那么你可能需要更改查询直到它出现在列表中。例如SELECT * FROM ([query name])
  • @Parfait 对不起,我错过了 connectionString,
    Const ConstrAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=(path of Database).accdb;Persist Security Info=False;"
  • @Slai 我真是个傻瓜,谢谢。

标签: vba excel


【解决方案1】:

为什么不改成 Recordset 和 TableDef?您不需要以这种方式打开数据库;为 Microsoft Office xx.x Access 数据库引擎对象库添加参考(工具->参考)

Sub test()
Dim BDAnalyzed As Database
Dim RecordTable As Recordset
Dim RecordTableDef As TableDef
Dim CounterTitles As Long
Const DesiredQuery = "Title For Query"
Const PathToDB = "C:..."
    Set BDAnalyzed = DBEngine.Workspaces(0).OpenDatabase(PathToDB)
    Set RecordTable = BDAnalyzed.OpenRecordset(DesiredQuery, dbOpenDynaset)
    Set RecordTableDef = BDAnalyzed.TableDefs(RecordTable)
    For CounterTitles = 0 To RecordTableDef.Fields.Count - 1
    MsgBox RecordTableDef.Fields(CounterTitles).Name
    Next CounterTitles
End Sub

【讨论】:

  • 谢谢。你的代码比我的简单,我会努力学习的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多