本主题中的部分内容可能不适用于某些语言。
与外部数据源连接,从工作表运行查询,然后 SQL.REQUEST 将查询结果以数组的形式返回,而无需进行宏编程。如果没有此函数,则必须安装 Microsoft Excel ODBC 加载项程序 (XLODBC.XLA)。 您可从 Microsoft Office 网站安装加载项。
语法
SQL.REQUEST(connection_string,output_ref,driver_prompt,query_text,col_names_logical)
Connection_string 提供信息,如数据源名称、用户 ID 和密码等。这些信息对于连接数据源的驱动程序是必需的,同时它们必须满足驱动程序的格式要求。下表给出用于 3 个不同驱动程序的 3 个连接字符串的示例。
驱动程序 | 连接字符串 |
---|---|
dBASE | DSN=NWind;PWD=test |
SQL Server | DSN=MyServer;UID=dbayer; PWD=123;Database=Pubs |
ORACLE | DNS=My Oracle Data Source;DBQ=MYSER VER;UID=JohnS;PWD=Sesame |
-
在试图连接到数据源之前,必须定义在 connection_string 中使用的数据源名称 (DSN)。
-
可以数组或字符串的形式输入 connection_string。如果 connection_string 超过 250 个字符,就必须以数组的形式输入。
-
如果函数 SQL.REQUEST 不能用 connection_string 访问数据源,则返回错误值 #N/A。
Output_ref 对用于存放完整的连接字符串的单元格的引用。如果在工作表中输入 SQL.REQUEST 函数,则可以忽略 output_ref。
-
当需要函数 SQL.REQUEST 返回完整的连接字符串时,可以使用 output_ref(此种情况下,必须在宏表中输入 SQL.REQUEST 函数)。
-
如果省略 output_ref,函数 SQL.REQUEST 不能返回完整的连接字符串。
Driver_prompt 指定驱动程序对话框何时显示以及何种选项可用。该参数使用下表中所描述的数字之一。如果省略 driver_prompt,SQL.REQUEST 函数使用 2 作为默认值。
Driver_prompt | 说明 |
---|---|
1 | 一直显示驱动程序对话框。 |
2 | 只有在连接字符串和数据源说明所提供的信息不足以完成连接时,才显示驱动程序对话框。所有对话框选项都可用。 |
3 | 只有在连接字符串和数据源说明所提供的信息不足以完成连接时,才显示驱动程序对话框。如果未指明对话框选项是必需的,这些选项变灰,不能使用。 |
4 | 不显示对话框。如果连接不成功,则返回错误值。 |
-
如果 SQL.REQUEST 函数不能在指定数据源中执行 query_text,则返回错误值 #N/A。
-
可将引用连接到 query_text 上来更新查询。在下面的例子中,每当 $A$3 更改时,SQL.REQUEST 函数都使用新的数值来更新查询。
"SELECT Name FROM Customers WHERE Balance > "&$A$3&"".
Microsoft Excel 将字符串长度限制在 255 个字符内。如果 query_text 超过此长度,请在垂直单元格区域中输入查询并将整个区域作为 query_text。所有单元格的值连接在一起形成完整的 SQL 语句。
Column_names_logical 指示是否将列名作为结果的第一行返回。如果要将列名作为结果的第一行返回,请将该参数设置为 TRUE。如果不需要将列名返回,则设置为 FALSE。如果省略 column_names_logical,则 SQL.REQUEST 函数不返回列名。
返回值
- 如果此函数完成了它的所有操作,则返回查询结果数组或受查询影响的行数。
- 如果 SQL.REQUEST 函数不能使用 connection_string 访问数据源,则返回错误值 #N/A。
说明
- SQL.REQUEST 函数可以数组的形式输入。如果以数组形式输入 SQL.REQUEST 函数,该函数将返回一个恰好填充选定区域的数组。
- 如果单元格区域大于结果集,则 SQL.REQUEST 函数将向返回的数组添加空白单元格,直至增加到所需要的大小。
- 如果结果集大于以数组形式输入的区域,则 SQL.REQUEST 函数返回整个数组。
- SQL.REQUEST 函数的参数与 Visual Basic for Application 中 SQLRequest 函数的参数顺序不同。
示例
假设需要对名为 DBASE4 的 dBASE 数据库进行查询。在单元格中输入下列公式时,将会返回查询结果数组,其中第一行为列名:
SQL.REQUEST("DSN=NWind;DBQ=c:\msquery;FIL=dBASE4", c15, 2, "Select Custmr_ID, Due_Date from Orders WHERE order_Amt>100", TRUE)