2009-08-16 105 views
28

我正在使用MS Excel通过ODBC从MySQL数据库获取数据。
我使用SQL查询成功获取数据。但是现在我想让这个查询参数化。
所以我想知道是否可以使用单元格值(电子表格单元格)作为这种查询的参数。
例如,对于这个查询:Excel:使用单元值作为SQL查询的参数

select name from user where id=1 

我想获得在电子表格中的值,比如说,从小区D4的ID。

这是正确的方法来参数化查询?我该怎么做?

谢谢。

回答

30

我和你有同样的问题,Noboby能理解我,但我用这种方式解决了它。

SELECT NAME, TELEFONE, DATA 
FROM [sheet1$a1:q633] 
WHERE NAME IN (SELECT * FROM [sheet2$a1:a2]) 

你需要将其它表的参数时,SQL会考虑像作为 数据库信息,那么你可以选择的信息,并比较他们到你喜欢的参数。

+0

谢谢,我不知道这一点。我会试试看。 – GetFree 2011-10-05 21:59:05

+0

您好,对不起后面的问题,我想我们也可以使用命名函数/命名范围/命名单元格作为参数? – 2017-06-29 04:55:08

3
queryString = "SELECT name FROM user WHERE id=" & Worksheets("Sheet1").Range("D4").Value 
+0

我想我必须在VBA脚本中这样做,对吧?我不认为我可以在SQL窗口中输入该表达式。 – GetFree 2009-08-17 01:13:48

+0

这是VBA,是 – barrowc 2009-08-17 01:21:05

10

如果您使用的是微软查询,您可以添加“?”到您的查询...

select user from user where id =?

当你回到excel时,它会弹出一个小窗口询问cell/data/etc。

在弹出窗口中,您也可以选择“始终使用此单元格作为参数”,无需在每次刷新数据时定义该单元格。这是最简单的选择。

1

SQL有点像MS SQL的语法。

SELECT * FROM [table$] WHERE *; 

重要的是,表名以$符号结尾,整个事物放在括号中。作为条件,您可以使用任何值,但到目前为止,Excel不允许使用我称之为“SQL撇号”(')的内容,因此建议使用一个字中的列标题。

如果你有一个名为“用户”表中列出的用户,而id是在标题为“ID”,并在标题为“姓名”一栏名称一栏,查询将如下所示:

SELECT Name FROM [Users$] WHERE id = 1; 

希望这会有所帮助。