0

我有一个链接到 CSV 文件的数据库。数据库的名称是AllInformation,存储在 path = some_path中。在AllInformation中,我有一个带有参数的查询(名为MyQuery)。它的名字是[Current date],后者的类型是 date。

1) 如何从 Excel VBA 代码连接到数据库 - AllInformation(我使用的是 Excel 2007)?数据库AllInformation没有任何密码。2) 如何使用设置的参数[Current date]运行查询 - MyQuery?3) 如何将MyQuery的结果复制到 Excel 工作表中?

我需要这个,因为直接在 CSV 文件中搜索非常耗时。MyQuery在 4 分钟内找到我需要的内容,而通过 VBA 在 CSV 文件中直接搜索大约需要 1 小时。

谢谢您的回答。

4

2 回答 2

0

作为旁注,您编写的用于直接搜索 CSV 文件的代码可能存在一些设计问题,这使得获取不同的搜索时间非常低效。

也就是说,请执行以下操作:

  1. 将对 Access 数据库引擎的引用添加到 Excel VBA 项目。在 Office 2010 中,这将是对Microsoft Office 14.0 Access database engine Object Library. 这个库为 Access 数据库引擎提供了一个基于 DAO 的接口。
  2. 在 Google 上查找如何使用 DAO。查找如何使用参数运行查询。
  3. 另请查看如何将 DAO 记录集复制到 Excel 电子表格中。

这些是您询问的常见任务。如果您花几秒钟的时间搜索,您应该能够在网上找到许多答案。我已经提供了足够的信息,您应该能够找到答案。

于 2013-10-28T16:05:01.250 回答
0

我从 Excel VBA 中解决了这个问题,查询 Access 2007 X.accdb 文件:

'
' Variables:
'   i: counter
'   j: counter
'   nFlds: number of fields in the query
'   nMax: maximum number of records to be exported, 0=no limit
'   strQry: query name
'
'   objApp: Access.Application
'   qdf: QueryDef
'   rst: Recordset
'
Function daoDoQuery()
'
  Dim i, j, nFlds, nMax, strQry
'
  Dim objApp, qdf
  Dim rst As DAO.Recordset
'
  Set objApp = CreateObject("Access.Application")
  objApp.OpenCurrentDatabase "some_path\AllInformation.accdb"
'
' get Recordset:
'
  strQry = "MyQuery"
  Set qdf = objApp.CurrentDb.QueryDefs(strQry)
'
' here [Current date] is entered:
'
  qdf.Parameters(0).Value = Now()
  Set rst = qdf.OpenRecordset(dbOpenDynaset)
'
  If (rst.EOF) Then
    Set rst = Nothing
    daoDoQuery = 0
    Exit Function
  End If
'
  nFlds = rst.Fields.Count
'
' create a new Excel Workbook to write results:
'
  i = 1
  Application.ScreenUpdating = False
  Workbooks.Add
  For j = 1 To nFlds
    With Cells(i, j)
      .Font.Bold = True
      .Font.Size = 12
      .Value = rst.Fields(j - 1).Name
    End With
  Next
'
  nMax = 50
  i = i + 1
'
  Do While (Not rst.EOF)
    '
    For j = 1 To nFlds
      Cells(i, j).Value = rst(j - 1)
    Next
    '
    rst.MoveNext
    i = i + 1
    If (nMax > 0) Then
      If (i > nMax) Then
        Exit Do
      End If
    End If
  Loop
'
  Application.ScreenUpdating = True
'
  rst.Close
  Set rst = Nothing
  Set qdf = Nothing
  Set objApp = Nothing
'
  daoDoQuery = 1
'
End Function

这将完成这项工作,我将创建一个新的 Excel 工作簿,其中第一个工作表作为结果列表:

daoDoQuery
于 2013-10-28T17:17:41.527 回答