如何将SQL语句结果导出到Excel文件
我有一个Access数据库和一个Excel VBA表格。我输入数据库的所有数据都是通过VBA表单输入的 该数据库包含我们今年在公司已经收到的所有福利卡。但同一名员工可以索要两次或更多的卡,因此我们会在DB上为他保留多条记录 我需要的是,当记录数大于1时,SQL语句结果应显示在Excel报告中 我使用SELECT*COUNT语句来知道何时有多条记录与搜索条件兼容。但我无法将结果显示在Excel文件中 这是我的密码:如何将SQL语句结果导出到Excel文件,sql,excel,vba,ms-access,Sql,Excel,Vba,Ms Access,我有一个Access数据库和一个Excel VBA表格。我输入数据库的所有数据都是通过VBA表单输入的 该数据库包含我们今年在公司已经收到的所有福利卡。但同一名员工可以索要两次或更多的卡,因此我们会在DB上为他保留多条记录 我需要的是,当记录数大于1时,SQL语句结果应显示在Excel报告中 我使用SELECT*COUNT语句来知道何时有多条记录与搜索条件兼容。但我无法将结果显示在Excel文件中 这是我的密码: Public Function Relatorio() Dim sql A
Public Function Relatorio()
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim rel As String
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & enderecoDB & ";Jet OLEDB:Database"
cn.Open
Set rs = New ADODB.Recordset
sql = "INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=" & enderecoDB & ";', 'SELECT * FROM [Planilha1$]') SELECT * FROM controle WHERE BP = " & controlectform.nmbpbox.Value & ";"
rs.Open sql, cn
End Function
当我运行此代码时,它会给我一条消息,如:
找不到OPENROWSET表出口
我无法安装新程序,所以我只需要使用Excel VBA和Access DB即可
我如何才能做到这一点?我认为Access不支持您正在使用的OPENROWSET动态表。我有很多老项目都是这样做的,所以这里是我的方法
Public Function Relatorio()
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim rel As String
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & enderecoDB & ";Jet OLEDB:Database"
cn.Open
Set rs = New ADODB.Recordset
dim path_To_XLSX
dim name_of_sheet
path_To_XLSX = "c:\temp\output.xlsx"
name_of_sheet = "Planilha1"
sql = sql = "SELECT * INTO [Excel 12.0;Database=" & path_To_XLSX & "]." & name_of_sheet & " FROM controle WHERE BP = '" & controlectform.nmbpbox.Value & "';"
rs.Open sql, cn
'If this application is in an unsecure environment, use the following code instead! This is to prevent a SQL injection, security concern here.
'As it is an Access Database, this is likely overkill for this project
'Create Command Object.
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = cn
cmd1.CommandText = "SELECT * FROM controle INTO [Excel 12.0;Database=" & path_To_XLSX & "]." & name_of_sheet & " WHERE BP = ?"
' Create Parameter Object.
Set Param1 = Cmd1.CreateParameter(, adInteger, adParamInput, 5) 'use adVarchar for strings(versus adInteger), https://www.w3schools.com/asp/met_comm_createparameter.asp
Param1.Value = controlectform.nmbpbox.Value
Cmd1.Parameters.Append Param1
Set Param1 = Nothing
Set Rs = Cmd1.Execute()
End Function
很多年前我就有过这样的挑战,我都记不起来了,但是这个链接响了。检查它是否有用
请尝试{connw.Open;OleDbCommand命令;command=new OleDbCommand Update Deliveries+设置Deliveries.EmployeeID=?,Deliveries.FIN=?,Deliveries.TodaysOrders=?,connw;command.Parameters.AddnewOleDbParameter@EMPID,Convert.ToDecimalempsplitIt[1];command.Parameters.AddnewOleDbParameter@FIN,卡车碎片[1].ToString;command.Parameters.AddnewOleDbParameter@TodaysOrder,R;catchReturnedRows=command.ExecuteNonQuery;//Commit connw.Close;}catch-OleDbException异常{MessageBox.Showexception.Message,OleDb异常;}您可以使用它来打印实际的SQL
Private Sub Command2_Click()
Dim db As Database
Dim qr As QueryDef
Set db = CurrentDb
For Each qr In db.QueryDefs
TextOut (qr.Name)
TextOut (qr.SQL)
TextOut (String(100, "-"))
Next
End Sub
Public Sub TextOut(OutputString As String)
Dim fh As Long
fh = FreeFile
Open "C:\Users\rs17746\Desktop\Text_Files\sample.txt" For Append As fh
Print #fh, OutputString
Close fh
End Sub
这里还有一个版本给你。这会将每个查询的结果导出到一个单独的文本文件中
Private Sub Command0_Click()
Dim qdf As QueryDef
Dim strFileName As String
For Each qdf In CurrentDb.QueryDefs
If Left(qdf.Name, 1) <> "~" Then
'you need to figure out TransferText command. Maybe
'you won't be lazy and expect people to read it to
'you and tutor you on how it works.
strFileName = qdf.Name
'Docmd.TransferText ....
DoCmd.TransferText transferType:=acExportDelim, TableName:=strFileName, FileName:="C:\test\" & strFileName & ".txt", hasfieldnames:=True
End If
Next qdf
MsgBox "Done"
End Sub
尝试将此查询作为视图放入access中,然后从vbaI中查询新视图,并使用表单中的字段进行选择。即使我将查询置于access中,我是否可以继续使用表单字段进行选择?您的回答对我帮助很大。Excel无法接受sql语句。在FROM子句上给我一个错误。我在网上搜索,发现它是另一个与代码配合良好的sql语句。sql=选择*进入[Excel 12.0;数据库=&path\u To\u XLSX&]。&表格的名称,来自控件,其中BP='&controllectform.nmbpbox.Value&';非常感谢。我已经试过两次了。将使用您的修复编辑我的答案。很高兴这有帮助!这无疑是在C中进行参数化查询的一种好方法,但在本例中,他使用的是Access,它使用VBA VB6 era,而不是VB.NET。实际上,我正准备为一个VB.NET应用程序编写一个查询,不带花括号。当然,我相信命令字符串是最棘手的部分。。。如果我是对的,我不确定。。。使用带有命令功能的c oledb并嵌入此查询可能会。。。这就是我想尝试的