Sql 如何获取Jet OLE DB查询的输入
背景: 我正在使用Excel2003 我有2个Excel文件源,列表,一个基本上是我的源数据。第二个是我使用excel导入外部数据功能获取第二张工作表中的数据。然后,我使用modifiy查询来允许我使用SQL查询我的数据并限制我显示的数据 我的SQL查询: 我的问题是,我想将单元格A1作为查询的输入。所以在A1中,我想让Brent替换第一个WHERE条件 我希望找到一些东西,我将能够改变一个单元格,并能够刷新单元格A1中的任何数据 有人有主意吗 谢谢 我的连接字符串是:Sql 如何获取Jet OLE DB查询的输入,sql,excel,scripting,Sql,Excel,Scripting,背景: 我正在使用Excel2003 我有2个Excel文件源,列表,一个基本上是我的源数据。第二个是我使用excel导入外部数据功能获取第二张工作表中的数据。然后,我使用modifiy查询来允许我使用SQL查询我的数据并限制我显示的数据 我的SQL查询: 我的问题是,我想将单元格A1作为查询的输入。所以在A1中,我想让Brent替换第一个WHERE条件 我希望找到一些东西,我将能够改变一个单元格,并能够刷新单元格A1中的任何数据 有人有主意吗 谢谢 我的连接字符串是: 您在查询中错误地忽略了F
您在查询中错误地忽略了FROM关键字 因为您正在查询Excel工作簿,所以最好确保它已关闭;如果使用OLEDB,您应该知道。还要注意Excel是如何确定数据类型的,如果出现意外的空值,可能会有点奇怪;更多详情请访问 您尚未指定工作表,因此我假定它的名称为Sheet1 大部分连接字符串由默认值组成,可以删除 因为这是一个编程网站,您正在询问有关Excel的信息,那么一些VBA如何:
Sub ExcelExample()
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Mode=Share Deny Write;Extended Properties=""HDR=YES;"";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" & _
"Jet OLEDB:Global Partial Bulk Ops=2;" & _
"Jet OLEDB:Global Bulk Transactions=1;" & _
"Jet OLEDB:New Database Password="""";" & _
"Jet OLEDB:Create System Database=False;" & _
"Jet OLEDB:Encrypt Database=False;" & _
"Jet OLEDB:Don't Copy Locale on Compact=False;" & _
"Jet OLEDB:Compact Without Replica Repair=False;" & _
"Jet OLEDB:SFP=False"""
Const SQL_TEXT As String = _
"SELECT * FROM ['Master List$'] WHERE [Name] Like ?;"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = CONN_STRING
.CommandText = SQL_TEXT
Dim param
Set param = CreateObject("ADODB.Parameter")
With param
.Direction = 1 ' adParamInput
.Type = 202 ' adVarWChar
.Size = 255
.Attributes = 64 ' adParamNullable
.Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value & "%"
End With
.Parameters.Append param
End With
Dim rs
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .Source = cmd
.Open
' Do stuff with recordset...
End With
End Sub
更新
连接字符串的哪些部分是无用的?大部分!例如,默认用户是Admin,但Jet工作组文件是空字符串,因为Excel不使用Jet安全性。我认为在不改变行为的情况下,连接字符串可以减少如下:
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Extended Properties=""HDR=YES;"";"
你是不是无意中删除了这个问题的最后一部分?我很困惑…连接字符串的哪些部分是无用的?
Sub ExcelExample()
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Mode=Share Deny Write;Extended Properties=""HDR=YES;"";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" & _
"Jet OLEDB:Global Partial Bulk Ops=2;" & _
"Jet OLEDB:Global Bulk Transactions=1;" & _
"Jet OLEDB:New Database Password="""";" & _
"Jet OLEDB:Create System Database=False;" & _
"Jet OLEDB:Encrypt Database=False;" & _
"Jet OLEDB:Don't Copy Locale on Compact=False;" & _
"Jet OLEDB:Compact Without Replica Repair=False;" & _
"Jet OLEDB:SFP=False"""
Const SQL_TEXT As String = _
"SELECT * FROM ['Master List$'] WHERE [Name] Like ?;"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = CONN_STRING
.CommandText = SQL_TEXT
Dim param
Set param = CreateObject("ADODB.Parameter")
With param
.Direction = 1 ' adParamInput
.Type = 202 ' adVarWChar
.Size = 255
.Attributes = 64 ' adParamNullable
.Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value & "%"
End With
.Parameters.Append param
End With
Dim rs
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .Source = cmd
.Open
' Do stuff with recordset...
End With
End Sub
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Extended Properties=""HDR=YES;"";"