Sql 基于单元格的带条件查询

Sql 基于单元格的带条件查询,sql,excel,vba,excel-2010,Sql,Excel,Vba,Excel 2010,我正在尝试编写一个VBA代码来查询一些值 我的SQL查询在WHERE语句中有两个条件 列B中的值在查询中,因此没有问题 列A中的值是一个以数字开头的代码,但包含字母,因此应将其视为一个字符串,以便使用“6F3S”;具体来说:database.columnA='6F3S' 我的问题来自这样一个事实:我想将表格“Input_sheet”中单元格D1中的元素6F3S外包,以便用户可以在必要时使用其他代码对其进行更改 这是我目前的代码: 子查询1() 将值Cell1设置为字符串 ValueCellD

我正在尝试编写一个VBA代码来查询一些值

我的SQL查询在WHERE语句中有两个条件

  • 列B中的值在查询中,因此没有问题

  • 列A中的值是一个以数字开头的代码,但包含字母,因此应将其视为一个字符串,以便使用“6F3S”;具体来说:database.columnA='6F3S'

我的问题来自这样一个事实:我想将表格“Input_sheet”中单元格D1中的元素6F3S外包,以便用户可以在必要时使用其他代码对其进行更改

这是我目前的代码:

子查询1()
将值Cell1设置为字符串
ValueCellD1=工作表(“输入表”).范围(“D1”).值
使用ActiveSheet.ListObjects.Add(SourceType:=0,Source:=0)_
“FFFF;DSN=XXXXXXXXXX;”,目的地:=范围($A$7”)。查询表
.CommandText=数组(_
选择database.columnA、database.columnB、database.columnC_
&Chr(13)和“&Chr(10)和”_
“来自IMPALA.database数据库”_
&Chr(13)和“&Chr(10)和”_
其中(database.columnA=ValueCellD1)和(database.columnB='London'))
.rowNumber=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.refresh onfileopen=True
.BackgroundQuery=True
.RefreshStyle=xlInsertDeleteCells
.AdjustColumnWidth=True
.RefreshPeriod=0
.PreserveColumnInfo=True
.ListObject.DisplayName=“YYYYYYYY”
.Refresh BackgroundQuery:=False
以
端接头
我收到一封信

运行时错误“13”:类型不匹配

当我尝试调试时,它出现在这里:

.CommandText=Array(_
选择database.columnA、database.columnB、database.columnC_
&Chr(13)和“&Chr(10)和”_
“来自IMPALA.database数据库”_
&Chr(13)和“&Chr(10)和”_
其中(database.columnA=ValueCellD1)和(database.columnB='London'))

注意:我目前正在使用Excel 2010,您需要从字符串中获取
ValueCellD1
,以便将其识别为变量

.CommandText=Array(_
选择database.columnA、database.columnB、database.columnC_
&Chr(13)和“&Chr(10)和”_
“来自IMPALA.database数据库”_
&Chr(13)和“&Chr(10)和”_
其中(database.columnA='”&ValueCellD1&“')和(database.columnB='London'))
实际上,我不知道为什么要在字符串中插入
&Chr(13)&“&Chr(10)&
。以下措施也应该奏效:

.CommandText=Array(_
选择database.columnA、database.columnB、database.columnC_
“来自IMPALA.database数据库”_
其中(database.columnA='”&ValueCellD1&“')和(database.columnB='London'))
请注意,如果将单元格值读入变量

ValueCellD1=工作表(“输入表”).范围(“D1”).值
在不验证单元格值的情况下将其放入SQL命令中,那么任何可以在D1中编辑单元格值的人都可以轻松攻击您的数据库并运行任何他喜欢的SQL命令(例如删除它)从不信任用户输入。始终验证它


请参阅。

您需要从字符串中获取
ValueCellD1
,以便将其识别为变量

.CommandText=Array(_
选择database.columnA、database.columnB、database.columnC_
&Chr(13)和“&Chr(10)和”_
“来自IMPALA.database数据库”_
&Chr(13)和“&Chr(10)和”_
其中(database.columnA='”&ValueCellD1&“')和(database.columnB='London'))
实际上,我不知道为什么要在字符串中插入
&Chr(13)&“&Chr(10)&
。以下措施也应该奏效:

.CommandText=Array(_
选择database.columnA、database.columnB、database.columnC_
“来自IMPALA.database数据库”_
其中(database.columnA='”&ValueCellD1&“')和(database.columnB='London'))
请注意,如果将单元格值读入变量

ValueCellD1=工作表(“输入表”).范围(“D1”).值
在不验证单元格值的情况下将其放入SQL命令中,那么任何可以在D1中编辑单元格值的人都可以轻松攻击您的数据库并运行任何他喜欢的SQL命令(例如删除它)从不信任用户输入。始终验证它


瞧。

非常感谢您!我相信Chr(13)&“&Chr(10)来自于我将VBA作为一个录制的宏启动的事实。非常感谢!我相信Chr(13)&“&Chr(10)来自于我将VBA作为一个录制的宏启动的事实。