PC SOFT

WINDEV的在线文档

  • 初始化时读取数据
  • “添加记录”与“h.修改文件的使用”
  • 为什么使用常量“h查询.无修正”
  • 数值列表/参数列表
  • 传递参数给一个查询的其他方法
  • 查询参数
  • 释放查询的资源
  • 优化HFSQL数据库表上的查询
  • “执行一个查询”与“基于该查询的表格控件”
  • “执行一个查询”与“基于该查询的报表”
  • SQL查询(函数“H执行SQL查询”或执行通过查询编辑器创建的SQL查询)
产品
WinDevWebDev-服务器代码WebDev-浏览器代码WinDev Mobile报表和查询
平台
WindowsLinuxWindows MobileWindows PhoneWindows Store appsAndroidAndroid Widget iPhone/iPad
语言
JavaPHPAjax用户代码(MCU)外部语言
数据库
HFSQLHFSQL Client/Server存储过程HF 5.5OLE DBODBC本地访问

声明一个在HFSQL引擎的查询编辑器下创建的查询并执行该查询。 查询的结果将可以被浏览。 若已经存在一个拥有相同名称的查询,那么该查询将被替换。 结果被重新计算。

注意: 若想定位在查询的结果的第一个记录上,请使用(例如)H读第一个

若想释放一个查询的资源,请使用:

注意: 一个查询在以下情况不能被初始化:

18版本和更高版本
WinDevWindows Store apps 此函数现在可用于Windows Store apps模式。
18新版本
WinDevWindows Store apps 此函数现在可用于Windows Store apps模式。
WinDevWindows Store apps 此函数现在可用于Windows Store apps模式。

Note: From version 19, HFSQL is the new name of HyperFileSQL.
例子
// 初始化查询"QRY_Customer_84"
H执行查询QRY_Customer_84

// Oracle数据库表的查询:  Customer使用"MyConnection"连接
// QRY_MyQuery = "Select * from customers where CustomerID =?"
H执行查询QRY_MyQueryh查询.默认5

// 执行并显示一个项目中没有的查询的数据
// "QRY_List_Products.WDR"时一个由"报表&查询"创建的查询
// 声明一个与查询拥有同一个逻辑名称的数据资源。
sQueryFile字符串型
sQueryFile文件报表和查询目录()+【"\"】+"QRY_List_Products.WDR"
QRY_List_Products数据源型

// 为一个产品家庭执行查询:
// FAMILY_CODE时一个查询的变量。
H执行查询sQueryFileh查询.默认FAMILY_CODE

// 浏览查询
对于每个QRY_List_Products
表格添加行TABLE_PRODUCTsQueryFile.PRODUCT_NAME,...
sQueryFile.DESIGNATIONsQueryFile.PriceBT
结束

语法

产生一个查询错误(无连接) 隐藏详细信息

 <结果> = H执行查询(<查询名称> [, <模式> [, <参数1> [, ... [, <参数N>]]]])
<结果>: 布尔型
  • ,若查询被初始化,
  • ,若非如此。 函数H错误用于获取更多关于遇到的问题的详细信息。
<查询名称>: 字符串(有引号或无引号)
需执行的查询:
  • 需初始化的查询(文件".WDR")的名称和完整路径。
  • 需初始化的查询的逻辑名称。
    若已经声明了一个拥有相同名称的查询,那么它将被新的查询替换。
<模式>: 整数型可选常量
查询的初始化的选项:
h.使用过滤器
(可与其他常量一同使用的选项)
若该参数被指明:
  • 查询的结果对应于一个过滤器类型的记录选择,如果HFSQL允许的话。 否则,查询的结果是一个HFSQL视图
  • 不可进行以下操作: 在查找的结果上进行查找,查找上的查找,查找的视图,视图的查找。
  • 浏览结果时指定的浏览字段被忽略。
  • 放大镜在一个与某个查询相关联的表格上不可用。
  • 函数H记录数量在查询上不可使用。
    注意: 若该选项被指明,那么常量h.修改文件将自动被使用。
若该参数没有被指明(默认):
  • 查询的结果是一个HFSQL视图
  • 您可以在查询上实现以下操作: 在查找的结果上进行查找,查找上的查找,查找的视图,视图的查找。
  • 浏览结果时指定的浏览字段被考虑在内。
  • 放大镜可以在一个与某个查询相关联的表格上使用。
  • 函数H记录数量可以在查询上被使用。

h.使用事务查询在一个事务上执行。
一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。
若该查询无法正常结束(记录被加锁,停电,...),那么该事务会被取消并且数据库表被重置为执行查询之前的状态。
注意: 查询的执行将可能变得非常慢。

h.修改文件
(可与其他常量一同使用的选项)
基于HFSQL数据库表: 当修改查询的结果时(函数H添加,H写记录,H修改,H划线,H删除),这些修改将会保存到与查询对应的数据库表中。
若该选项没有被指明,那么只有查询的结果会被修改。
若想获得更多关于对一个查询的结果的修改的信息,请查阅修改查询内容
在非HFSQL的数据库表上,常量h.修改文件无效: 在修改查询结果时,查询中所涉及到的数据库表被自动修改。

h查询.可中断查询的初始化可以通过按键ESC而被中断。

Windows Store apps 该常量不可用。

存储过程 该常量被忽略。

h查询.默认
(默认数值)
查询的无中断的初始化。
h查询.无修正
OLE DB本地访问 HFSQL引擎不执行任何对查询的检测。 若该查询包含一些指定的一个连接类型(Oracle,SQL Server,...)的命令,那么该选项应该被使用。

注意: 若该常量被使用:

h查询.无HF修正
HFSQL HFSQL引擎不执行任何对数据库表的格式的检测(由空格填补,或不由空格填补)。
若该查询同时处理格式由空格填补的HFSQL数据库表和格式不由空格填补的HFSQL数据库表,则使用该常量。
h.延时对于那些应用在很多记录上并且相对来说很长的UPDATE和DELETE查询来说,该常量可用于将控制权留给其他使用数据库表的应用程序。
这种情况下:
  • 查询的执行变得更慢,
  • 数据库表的服务器不饱和,
  • 其他的使用数据库表的用户可以在不加锁的情况下继续进行访问。
HFSQL Client/ServerOLE DB本地访问 该常量被忽略。

h检查.重复在执行查找的时候激活对键值重复的管理。 若检测到一个键值重复的错误,那么该查找不会执行。
该常量强制使用常量h.使用事务。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
注意: 查询的执行将可能变得非常慢。

HFSQL Client/Server 若常量h检查.重复没有被指明,那么对键值重复的管理会被禁用。 如果用户没有权限禁用对键值重复的管理(函数H修改数据库权限),并且一个对键值重复的管理需要被实现,那么会产生一个权限错误。

h检查.完整性在执行查找的时候激活对完整性的管理。 若检测到一个完整性的错误,那么该查找不会执行。
该常量强制使用常量h.使用事务。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
注意: 查询的执行将可能变得非常慢。

HFSQL Client/Server 若常量h检查.完整性没有被指明,那么对完整性的管理会被禁用。 如果用户没有权限禁用对完整性的管理(函数H修改数据库权限),并且一个对完整性的管理需要被实现,那么会产生一个权限错误。

<参数1> ... <参数N>:
查询的根据初始化顺序的参数的数值(在查询编辑器下可见)。 每个参数需对应于所等待的类型。 不同的参数之间通过逗号来分隔。 您可以为每个参数指定(或不指定)数值。 注意: 若想指定查询的参数,您必须指定查询的初始化模式。

您可以指定一个数值列表,或者一个参数列表。 有关详细信息,请查阅备注

一个参数可以通过使用数值Null来忽略。 这种情况下,使用该参数的选择条件将会被忽略。

还有另外一种方法可以传递参数给一个查询,您只需在执行查询之前通过表达式<查询名称>.<参数名称> = <数值>,来指定查询的不同参数。
若想获取更多关于“不同的传递参数给查询方式,它们的优缺点”的信息,请查阅需使用来传递参数给一个查询的方法

通过一个连接执行一个查询 隐藏详细信息

 <结果> = H执行查询(<查询名称> [, <连接> [, <模式> [, <参数1> [, ... [, <参数N>]]]]])
<结果>: 布尔型
  • ,若查询被初始化,
  • ,若非如此。 函数H错误用于获取更多关于遇到的问题的详细信息。
<查询名称>: 字符串(有引号或无引号)
  • 需初始化的查询(文件".WDR")的名称和完整路径。
  • 需初始化的查询的逻辑名称。
若已经声明了一个拥有相同名称的查询,那么它将被新的查询替换。
<连接>: 可选的字符串(有引号或无引号)
一个连接的名称, 在数据模型编辑器下定义,或者通过函数H描述连接动态地定义。 该查询将会通过该连接执行。
OLE DB本地访问 若该参数没有被指明,并且该查询与通过OLE BD访问或本地访问的数据库表相关联,那么该查找会通过第一个在该查找中找到的数据库表所使用的连接来执行。 若一个数据库表所使用的连接在使用函数H执行查询之前被修改了,那么将使用新的连接。
<模式>: 整数型可选常量
查询的初始化的选项:
h.使用过滤器
(可与其他常量一同使用的选项)
若该参数被指明:
  • 查询的结果对应于一个过滤器类型的记录选择,如果HFSQL允许的话。 否则,查询的结果是一个HFSQL视图
  • 不可进行以下操作: 在查找的结果上进行查找,查找上的查找,查找的视图,视图的查找。
  • 浏览结果时指定的浏览字段被忽略。
  • 放大镜在一个与某个查询相关联的表格上不可用。
  • 函数H记录数量在查询上不可使用。
    注意: 若该选项被指明,那么常量h.修改文件将自动被使用。
若该参数没有被指明(默认):
  • 查询的结果是一个HFSQL视图
  • 您可以在查询上实现以下操作: 在查找的结果上进行查找,查找上的查找,查找的视图,视图的查找。
  • 浏览结果时指定的浏览字段被考虑在内。
  • 放大镜可以在一个与某个查询相关联的表格上使用。
  • 函数H记录数量可以在查询上被使用。

h.使用事务查询在一个事务上执行。
一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。
若该查询无法正常结束(记录被加锁,停电,...),那么该事务会被取消并且数据库表被重置为执行查询之前的状态。
注意: 查询的执行将可能变得非常慢。

h.修改文件
(可与其他常量一同使用的选项)
基于HFSQL数据库表: 当修改查询的结果时(函数H添加, H写记录, H修改, H划线, H删除),这些修改将保存到该查询涉及的数据库中。
若该选项没有被指明,那么只有查询的结果会被修改。
若想获得更多关于对一个查询的结果的修改的信息,请查阅修改查询内容
在非HFSQL的数据库表上,常量h.修改文件无效: 在修改查询结果时,查询中所涉及到的数据库表被自动修改。

h查询.可中断查询的初始化可以通过按键ESC而被中断。

Windows Store apps 该常量不可用。

存储过程 该常量被忽略。

h查询.默认
(默认数值)
查询的无中断的初始化。
h查询.无修正
OLE DB本地访问 HFSQL引擎不执行任何对查询的检测。 若该查询包含一些指定的一个连接类型(Oracle,SQL Server,...)的命令,那么该选项应该被使用。

注意: 若该常量被使用:

h查询.无HF修正
HFSQL HFSQL引擎不执行任何对数据库表的格式的检测(由空格填补,或不由空格填补)。 若该查询同时处理格式由空格填补的HFSQL数据库表和格式不由空格填补的HFSQL数据库表,则使用该常量。
h.延时对于那些应用在很多记录上并且相对来说很长的UPDATE和DELETE查询来说,该常量可用于将控制权留给其他使用数据库表的应用程序。
这种情况下:
  • 查询的执行变得更慢,
  • 数据库表的服务器不饱和,
  • 其他的使用数据库表的用户可以在不加锁的情况下继续进行访问。
HFSQL Client/ServerOLE DB本地访问 该常量被忽略。

Windows Store apps 该常量不可用。

h检查.重复在执行查找的时候激活对键值重复的管理。 若检测到一个键值重复的错误,那么该查找不会执行。
该常量强制使用常量h.使用事务。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
注意: 查询的执行将可能变得非常慢。

HFSQL Client/Server 若常量h检查.重复没有被指明,那么对键值重复的管理会被禁用。 如果用户没有权限禁用对键值重复的管理(函数H修改数据库权限),并且一个对键值重复的管理需要被实现,那么会产生一个权限错误。

h检查.完整性在执行查找的时候激活对完整性的管理。 若检测到一个完整性的错误,那么该查找不会执行。
该常量强制使用常量h.使用事务。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
注意: 查询的执行将可能变得非常慢。

HFSQL Client/Server 若常量h检查.完整性没有被指明,那么对完整性的管理会被禁用。 如果用户没有权限禁用对完整性的管理(函数H修改数据库权限),并且一个对完整性的管理需要被实现,那么会产生一个权限错误。

<参数1> ... <参数N>:
查询的根据初始化顺序的参数的数值(在查询编辑器下可见)。 每个参数需对应于所等待的类型。 不同的参数之间通过逗号来分隔。 您可以为每个参数指定(或不指定)数值。 注意: 若想指定查询的参数,您必须指定查询的初始化模式

您可以指定一个数值列表,或者一个参数列表。 想了解更多信息,请查阅备注

还有另外一种方法可以传递参数给一个查询,您只需在执行查询之前通过表达式<查询名称>.<参数名称> = <数值>,来指定查询的不同参数。
若想获取更多关于“不同的传递参数给查询方式,它们的优缺点”的信息,请查阅需使用来传递参数给一个查询的方法

一个参数可以通过使用数值Null来忽略。 这种情况下,使用该参数的选择条件将会被忽略。

注意

初始化时读取数据

根据查询(排序, 组, 等。), 这些数据在初始化查询的时候可以被读取(或不能)。

WinDevWindows Store apps用户代码(MCU)HFSQLHFSQL Client/ServerHF 5.5OLE DB本地访问

“添加记录”与“h.修改文件的使用”

HFSQL 当通过一个查询添加记录到一个数据库表中时,无论在查询中定义什么条件,该查询都会考虑已添加到数据库表中的记录。 该查询中的记录数目被有条理地修改。

本地访问 当通过一个查询添加记录到一个数据库表中时,该查询会考虑在查询中定义的条件。 仅当添加到数据库表中的记录符合该条件的情况下,该查询的记录数目才会被修改。

WinDev用户代码(MCU)OLE DB本地访问

为什么使用常量“h查询.无修正”

默认情况下,WinDev/WebDev在OLE DB和ODBC上通过提供者OLE DB解释SQL查询。 若想该查询不被解释,请使用常量h查询.无修正

例如若您在查询编辑器下直接输入查询的SQL代码,那么常量h查询.无修正可以被使用。

“h查询.无修正”没有被指明“h查询.无修正”被指明
自动确定查询中数据库表相关联的连接。需使用的连接需在函数H执行SQL查询里被指明。
替换所有PC SOFT的专有符号(例如: ']='开始于)为等价的标准SQL。不进行任何替换。 需使用标准SQL符号。
根据所使用的数据库使用的格式,对日期和时间进行格式化。
例如,WinDev/WebDev日期格式为'YYYYMMDD',但是在Access里,根据系统语言的不同,日期格式为#YYYYDDMM#或#YYYYMMDD#。
不进行任何格式转换。 需使用数据库认可的格式。
格式化浮点数(小数点分隔符可以是'.'或',')不进行任何对浮点数的格式化。
根据使用的数据库,将别名替换为在Where, Order by和Group by里的字段的全名
例如,JET引擎(Access, DBase, ...)不接受在一个查询的Where字句里的别名。
不进行任何替换。 您需在查询的代码里直接使用字句Where, Order by和Group by里的字段的完整名称

数值列表/参数列表

若该查询的参数之一的选择条件为“在列表中”或“不在列表中”,那么您必须指明数值列表或参数列表。

若想指明一个数值列表或一个参数列表,请用一个分号(;),一个回车或一个TAB来分隔不同的数值或参数。

例如:

H执行查询QueryNameh查询.默认"34000;34200;34400"

H执行查询QueryNameh查询.默认"34000 "+回车+"34200"+回车+"34400"

H执行查询QueryNameh查询.默认"34000"+TAB+"34200"+TAB+"34400"

注意: 若这些数值或参数之一包含一个分号,一个回车或一个TAB,那么您需用引号将该数值或参数括起来。 例如:

H执行查询QueryNameh查询.默认"'A;A';'A;B';'A;C'"

传递参数给一个查询的其他方法

若想在执行一个带参数的查询之前给它传递参数,您还可以使用以下语法:

<Query Name>.<Name of Parameter1> = xxx
<Query Name>.<Name of Parameter2> = xxx
<Query Name>.<Name of Parameter3> = xxx
H执行查询(<Query Name>)
IF 错误侦测 = True THEN ...

注意
  • 该语法简化了参数的传递。 若参数直接传递给函数H执行查询,您必须遵守参数的顺序。
  • 每次执行带参数的查询时,该查询的参数结构被重新初始化。

查询参数

不是查询的所有参数都必须被指明。 使用未指明的参数的查询的条件将会被忽略。 若想获取更多关于“传递参数给一个查询”的信息,请查阅需使用来传递参数给一个查询的方法

例如: SQL代码如下的名为"Customer_LastName_FirstName"的查询:

SELECT * FROM CUSTOMER WHERE LASTNAME = {Param1} AND FIRSTNAME = {Param2}

  • 指明了两个参数:
    H执行查询QRY_Customer_LastName_FirstNameh查询.默认"Smith""John"
    将执行查询
    SELECT * FROM CUSTOMER WHERE LASTNAME = 'Smith' AND FIRSTNAME = 'John'
  • 只有姓被指明:
    H执行查询QRY_Customer_LastName_FirstNameh查询.默认"Smith"
    将执行查询
    SELECT * FROM CUSTOMER WHERE LASTNAME= 'Smith'
  • 只有名被指明:
    sLastName通用型=空值
    // 为空变量使用必须的通用型(未填)

    H执行查询QRY_Customer_LastName_FirstNameh查询.默认sName"Vince"



    H执行查询QRY_Customer_LastName_FirstNameh查询.默认,空值,"Vince"
    将执行查询
    SELECT * FROM CUSTOMER WHERE FIRSTNAME= 'Vince'

释放查询的资源

若想释放一个查询的资源,请使用:若未实现该操作,那么该查询会一直存在于当前HFSQL背景下,且可以通过任何处理进行访问。

注意: 当执行该查询(使用函数H执行查询)的窗口关闭时,该查询的资源不会被自动释放。

WinDev用户代码(MCU)HFSQLHFSQL Client/ServerHF 5.5

优化HFSQL数据库表上的查询

  • 若想优化查询执行的时间,请在该查询所涉及的不同的数据库表上使用函数H优化,或使用函数H优化查询
  • 若想优化查询的处理时间,请在查询涉及的所有数据库表上使用函数H统计或函数H重建索引

WinDev用户代码(MCU)HFSQLHFSQL Client/ServerHF 5.5OLE DB本地访问

“执行一个查询”与“基于该查询的表格控件”

想了解更多信息,请查阅“浏览表格控件”与“查询的管理”

WinDev用户代码(MCU)HFSQLHFSQL Client/ServerHF 5.5OLE DB本地访问

“执行一个查询”与“基于该查询的报表”

当打印一个基于一个查询的报表时,若该查询已经被执行,那么它不会被重新执行。 若想强制性重新执行该查询(例如添加记录),您只需要使用函数H执行查询打印初始化报表查询

WinDevWindows Store apps用户代码(MCU)HFSQLHFSQL Client/ServerHF 5.5OLE DB本地访问

SQL查询(函数“H执行SQL查询”或执行通过查询编辑器创建的SQL查询)

  • 当在SQL查询里使用SQL DELETE, INSERT 或 UPDATE时,默认情况下,不会在一个HFSQL数据库上实现任何对完整性和键值重复的检查。
    • 若想自动实现一个队完整性的检测,您只需要指明常量h检查.完整性。 该常量用于在执行查找的时候激活对完整性的管理。 若检测到一个完整性的错误,那么该查找不会执行。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
      HFSQL Client/Server 若常量h检查.完整性没有被指明,那么对完整性的管理会被禁用。 如果用户没有权限禁用对完整性的管理(函数H修改数据库权限),并且一个对完整性的管理需要被实现,那么会产生一个权限错误。
    • 若想自动实现一个对键值重复的检测,您只需要指明常量h检查.重。. 该常量用于在执行查找的时候激活对键值重复的管理。 若检测到一个键值重复的错误,那么该查找不会执行。 一个事务被执行,记录在执行查询的期间以写入模式被加锁,并且在执行结束时被解锁,无论查询是否失败。 若在执行查询的时候应用程序停止了(例如停电),那么该事务将会在下次使用该查询的数据库表的时候被取消。
      备注: 若在执行一个UPDATE的查询时检测到一个键值重复的错误,则函数H执行查询返回且该处理将继续。 可以通过函数H错误信息来获取相应的错误。
      注意: 默认的自动向导不会因键值重复的错误而被调用。 会产生一个简单的键值重复的错误。 若一个向导通过函数H自定义错误处理被重新定义,那么该自定义向导会被调用。
      HFSQL Client/Server 若常量h检查.重复没有被指明,那么对键值重复的管理会被禁用。 如果用户没有权限禁用对键值重复的管理(函数H修改数据库权限),并且一个对键值重复的管理需要被实现,那么会产生一个权限错误。
  • UPDATE, DELETE或INSERT的查询只在执行的时候存在。 您无法在查询执行完之后在该类型的查询上使用W语言函数。
  • DELETE的查询不管理级联删除。
  • 18版本和更高版本
    当一个INSERT/UPDATE/DELETE查询在HFSQL数据库表上被执行的时候,您可以获取通过变量H.查询修改记录数添加,修改或删除的记录数目。
    18新版本
    当一个INSERT/UPDATE/DELETE查询在HFSQL数据库表上被执行的时候,您可以获取通过变量H.查询修改记录数添加,修改或删除的记录数目。
    当一个INSERT/UPDATE/DELETE查询在HFSQL数据库表上被执行的时候,您可以获取通过变量H.查询修改记录数添加,修改或删除的记录数目。

组件
WinDev wd200hf.dll
Linux wd200hf.so