查询Access数据库并将所有记录返回到Excel

时间:2014-02-19 03:30:22

标签: sql excel ms-access excel-vba vba

我正在处理一个宏,用户输入一个用于查询Access数据库的搜索词。我的问题是如何在单独的行中将这些记录返回到Excel?

例如,数据库包含家庭住址信息。如果用户搜索邮政编码,则所选择的记录将进入第1,2,3等行,以获得与查询中返回的家庭地址一样多的家庭地址。

下面是一些示例代码 - 我遗漏的部分已清楚标记。

我感谢任何帮助!

Sub DatabaseQuery()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim stDB As String, stSQL As String, stProvider As String
Dim SearchTerm As String

stDB = "Data Source= C:\Database.accdb" ' Change accordingly
stProvider = "Microsoft.ACE.OLEDB.12.0"

With cn
    .ConnectionString = stDB
    .Provider = stProvider
    .Open
End With

SearchTerm = Range("A1").Value ' Change accordingly

stSQL = "SELECT Field1, Field2, Field3 " & _
    "FROM Table1 WHERE Field4= '" & SearchTerm & "'"

rs.Open stSQL, cn, adOpenStatic

' *** Put all the records in Sheet2! *** Help me! :)

cn.Close
Set rs = Nothing
Set cn = Nothing

End Sub

2 个答案:

答案 0 :(得分:0)

您需要告诉我们您正在使用的Access版本,因为它会改变一些事情。

另外,为什么甚至提到连接字符串?我没有看到你说你在使用VB.NET。我所看到的只是MS Access& Excel - Office应用程序。

当Access将某些东西导出到Excel时,它几乎可以模仿它看起来像在数据表中查看数据一样。

如果 使用Access,请查看我编写的代码作为起点:

outputFileName = CurrentProject.Path & "\Reports\YourReportName.xlsx"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "YourName", outputFileName, True

如果您使用的是另一个前端,则需要在问题中告诉我们。否则,我们该如何帮助你呢?通过猜测?这是一个不能得到答案的好方法。

答案 1 :(得分:0)

我了解到有不止一种方法可以做到这一点。以下内容对我有用。

Sub DatabaseQuery()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim stDB As String, stSQL As String, stProvider As String
Dim SearchTerm As String

stDB = "Data Source= C:\Database.accdb" ' Change accordingly
stProvider = "Microsoft.ACE.OLEDB.12.0"

With cn
    .ConnectionString = stDB
    .Provider = stProvider
    .Open
End With

SearchTerm = Range("A1").Value ' Change accordingly

stSQL = "SELECT Field1, Field2, Field3 " & _
    "FROM Table1 WHERE Field4= '" & SearchTerm & "'"

rs.Open stSQL, cn, adOpenStatic

Sheets("Sheet2").Range("A1").CopyFromRecordset rs

cn.Close
Set rs = Nothing
Set cn = Nothing

End Sub