ExecuteSQL

在 FileMaker Pro 文件中为指定的表摹本执行 SQL 查询语句。

格式 

ExecuteSQL(sql 查询; 字段分隔符; 行分隔符{;参数...})

参数 

sql 查询 - SQL SELECT 语句。该语句可以包括一个 Union 子句,以结合两次查询的结果。该语句可以包含以编程方式生成的 SQL(动态参数),该 SQL 用于指示查询中将使用可选参数的位置。使用问号字符 (?) 指定动态参数。

字段分隔符 - 用作结果中字段之间的分隔符的字符串。如果指定空字符串,则分隔符为逗号。结果中最后一个字段的后面不显示字段分隔符。

行分隔符 - 用作结果中记录之间的分隔符的字符串。如果指定空字符串,则分隔符为回车符。结果中最后一行的后面不显示行分隔符。

参数 - 要解析的一个或多个用分号 (;) 分隔的表达式,用作查询语句中动态参数的值。

返回的数据类型 

文本

原始版本 

12.0

说明 

ExecuteSQL 允许您执行包含动态参数的 SQL SELECT 语句来安全地查询 FileMaker Pro 数据库,以避免可引发注入攻击的安全漏洞。

ExecuteSQL 不会识别在 FileMaker Pro 中创建的关系,这使您可以灵活地在 SQL 语句中定义关系,并从任何表中检索数据,而不受布局上下文的限制。

ExecuteSQL 无法执行会修改数据或数据库架构的 SQL 语句(例如 Insert Into 或 Delete Table 命令)。

sqlQuery 中使用多个动态参数时,第一个问号字符将由第一个参数参数替换,第二个由第二个参数替换,依此类推。

如果在查询解析或执行期间发生错误,ExecuteSQL将返回 ?. 要接收更详细的错误消息,请使用 ExecuteSQLe函数

注释 

  • 要向 SQL 查询中的日期应用正确格式,请使用 DATE 语句。如果不使用 DATE 语句,则 ExecuteSQL 会将日期视为文字字符串。
  • FileMaker Pro 将返回 Unicode/SQL 格式(而不是操作系统或文件的区域设置)的日期、时间和数值数据。
  • ExecuteSQL 仅接受不带花括号的 SQL-92 语法 ISO 日期和时间格式。ExecuteSQL 不接受带有花括号的 ODBC/JDBC 格式日期、时间和时间戳常数。
  • FileMaker SQL 使用 Unicode 二进制排序顺序,它不同于用于语言排序或默认中性语言排序顺序的 FileMaker Pro 排序顺序。
  • 有关 SELECT 语句语法、受支持 SQL 语句、表达式和“类别”函数的更多详细信息,请参阅《FileMaker ODBC 和 JDBC 指南》和《FileMaker SQL 参考》。
  • ExecuteSQL 函数使用 SQL SELECT 语句查询 FileMaker 数据源而不是 ODBC 数据源中的表。要对 ODBC 数据源执行 SELECT 和其他支持的 SQL 语句,请使用执行 SQL 语句脚本步骤

示例 1 

假设一个数据库包含两个表:“员工”和“薪金”,这两个表通过“员工ID”字段相联系。

显示“员工”和“薪金”的列表

注释  “员工::员工ID”、“薪金::员工ID”和“薪金::薪金”字段都是数值字段。

您可以使用 ExecuteSQL 函数从特定记录返回字段值,而不更改当前记录或修改搜索结果。

无论当前记录、搜索结果或布局如何,ExecuteSQL ( "SELECT 部门 FROM 员工 WHERE 员工ID = 1"; ""; "" ) 都返回“开发”。

示例 2 

在示例 1 中,假定您要在“员工”表中添加一个字段以显示某个员工的薪金相对于部门总薪金的百分比。尽管您可以在 FileMaker Pro 中使用计算式来生成该值,但还可以使用 ExecuteSQL 函数利用动态参数指定此查询。以下示例在指定字段(S.薪金E.员工IDS.员工ID)时使用“员工”表 (E) 和“薪金”表 (S) 的表别名。

在”员工“表中定义一个计算字段(部门薪金百分比),然后使用 ExecuteSQL 函数在以下计算中指定查询语句:

复制
Round ( 
   100 * 薪金::薪金 / ExecuteSQL ( 
      "SELECT SUM (S.薪金) 
      FROM 员工 E 
      JOIN 薪金 S 
      ON E.员工ID = S.员工ID 
      WHERE E.部门 = ?"; 
      ""; ""; 员工::部门
   ) ; 
2 )

注释  由于此计算需要从薪金表 (薪金::薪金) 中获取员工的薪金,因此您必须在关系图中的“员工::员工ID”和“薪金::员工ID”字段之间创建关系(请参阅创建和更改关系)。相反,ExecuteSQL 函数不使用关系图。因此,在本例中,JOIN 子句建立了 ExecuteSQL 中 SELECT 语句使用的关系。

对于每个员工记录,”部门薪金百分比“字段计算员工薪金相对于员工部门总薪金的百分比。

员工
员工ID 姓氏 部门 部门薪金百分比
1 Smith 开发 52.97
2 Ogawa 开发 47.03
3 Durand 品质 48.86
4 Garcia 品质 51.14
5 Mehmet 文档 100
6 Ferrini 市场营销 100