我在 Excel VBA 中有一个 Access 数据库和一个表单。我输入数据库的所有数据都是通过VBA表单输入的。
该数据库包含我们今年在公司收到的所有福利卡。但是同一个员工可以两次或多次索取卡,因此我们在数据库中为他提供了不止一条记录。
我需要的是当记录数大于1时,SQL语句结果应该出现在Excel报告中。
我使用 SELECT (*) COUNT
声明以了解何时有多个记录与搜索条件兼容。但我不能让结果出现在 Excel 文件中。
这是我的代码:
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
当我运行此代码时,它会给我一条消息,内容如下:
Can't locate the OPENROWSET Table exit
我无法安装新程序,因此我只需要使用 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
关于sql - 如何将 SQL 语句结果导出到 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239512/