PC SOFT

WINDEV的在线文档

  • 一个文本类型的键值字段或组合键的最小界限和最大界限
  • 过滤器和过滤的浏览
  • 选择条件
  • 启用/禁用一个过滤器
  • 一个组合键上的过滤器
  • 非HFSQL数据库表
产品
WinDevWebDev-服务器代码WebDev-浏览器代码WinDev Mobile报表和查询
平台
WindowsLinuxWindows MobileWindows PhoneWindows Store appsAndroidAndroid Widget iPhone/iPad
语言
JavaPHPAjax用户代码(MCU)外部语言
数据库
HFSQLHFSQL Client/Server存储过程HF 5.5OLE DBODBC本地访问

在一个数据库表,视图或查询上定义并启用一个过滤器。

执行之后,通常有如下情况:

  • 过滤器无法被创建: 函数H过滤器返回一个空字符串。 函数H错误用于获取错误的标识符。
  • 过滤器被创建: 函数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.
例子
//用一个条件简单过滤:
//查找一个城市中的客户

SearchKey字符串型
mycity字符串型

mucity"MONTPELLIER"
SearchKeyH过滤器客户"城市=""+mycity+"""
H读第一个客户SearchKey
只要H超出()=
// 记录的处理
...
H读下一个客户SearchKey
结束
// 取消过滤器
H禁用过滤器客户

//通过一个带有边界的键和一个条件实现的过滤:
// 浏览键值固定

SearchKey字符串型
// 过滤发票:在1/1/2005和
// 12/31/2005期间,总价大于税后1500欧元,
// 通过一个作为参数传递的折扣类型进行打折(文本字段)
SearchKeyH过滤器InvoiceInvoiceDate"20050101""20051231",...
字符串创建"TotalIOT>1500 AND DiscountType='%1'"+,...
替换sDiscountType"'""\'")))
// 函数"替换"用于在sDiscountType包含的所有撇号前
// 添加一个反斜杠
如果SearchKey不等于"",那么
H读第一个InvoiceSearchKey
只要H超出()=
// 记录的处理: 发送一个感谢信
Send_Letter()
H读下一个InvoiceSearchKey
结束
结束
...
// 取消过滤器
H禁用过滤器Invoice

语法

过滤器通过一个有界浏览键值和一个条件创建 隐藏详细信息

<结果> = H过滤器(<数据库表名称> , <浏览键值名称> , <最小界限> [, <最大界限:> [, <选择条件>]])
<结果>: 字符串
浏览字段。 对应于:
  • 数据库表的浏览键值(若启用过滤器)。
  • 一个空字符串(若无法启用过滤器)。
<数据库表名称>: 字符串(有引号或无引号)
所处理的数据库表,HFSQL视图或查找的名称。
<浏览键值名称>: 字符串(有引号或无引号)
用来浏览数据库表,视图或者查询的键值字段的名称。 该字段必须为数据库表,视图或查询的浏览键值。 最小界限和最大界限应用到该字段上。
<最小界限>: 浏览字段类型
浏览字段的最小数值(包含)(如果浏览键在数据模型中定义为升序方向)。 符合该最小值的记录将被包括在过滤器中。 对于降序浏览(即浏览键在数据模型中定义为降序方向),则为浏览字段的最大数值。
参数类型需对应于浏览字段的类型。 例如,若浏览字段为一个字符串,那么最小界限必须为一个字符串。
<最大界限:>: 浏览字段的类型,可选的参数
浏览字段的最大数值(包含),适用于升序浏览。 符合该最大值的记录将被包括在过滤器中。 参数类型需对应于浏览字段的类型。 例如,若浏览字段为一个字符串,那么最大界限必须为一个字符串。
对于降序浏览,则为浏览字段的最大数值。
若该参数没有被指明,那么过滤器的最大界限对应于参数<最小界限>的数值。
<选择条件>: 可选字符串(有符号)
创建过滤器的选择条件(请看备注)。 该选择条件可以是一个Ansi格式或Unicode格式的字符串。

过滤器通过一个条件创建 隐藏详细信息

<结果> = H过滤器(<数据库表名称> , <选择条件>)
<结果>: 字符串
浏览字段。 对应于:
  • 数据库表的浏览键值(若启用过滤器)
  • 一个空字符串(若无法启用过滤器)
<数据库表名称>: 字符串(有引号或无引号)
所处理的数据库表,HFSQL视图或查找的名称。
<选择条件>: 字符串(有引号)
创建过滤器的选择条件(请看备注)。 该选择条件可以是一个Ansi格式或Unicode格式的字符串。

注意

一个文本类型的键值字段或组合键的最小界限和最大界限

若最小界限和最大界限相同:
  • 若想实现一个完全匹配某个数值的过滤器,您需要在参数"最小界限"里指明该数值。
    例如,选择名称对应于"Smith"的客户:
    H过滤器CustomerName"Smith"

    名为"Smither"的客户不会被选择。
  • 若想实现一个某数值上的一般过滤器,您需要:
    • 通过常量h.最小值来填上最小界限从而给它设定最小数值。
    • 通过常量h.最大值来填上最大界限从而给它设定最大数值。
例如,选择名称开始于"Smith"的客户:
H过滤器CustomerName"Smith" + hMinVal"Smith" + hMaxVal
名为"Smith"和"Smither"的客户会被选择。

注意:

  • 常量h.最小值等价于字符(0)。
  • 常量h.最大值等价于字符(255)。

过滤器和过滤的浏览

执行函数H过滤器后,数据库表的浏览必须在由函数H过滤器返回的字段上实现。 若使用了另外一个字段来浏览数据库表,那么过滤器将被忽略。

当在一个数据库表上定义且启用一个过滤器时,所有被读的记录都符合过滤器。 若在浏览时再无其他符合过滤器的记录:

  • 函数H超出返回
  • 通过过滤器读到的最后一条记录将成为当前记录。
例如:
在一个过滤后的数据库表中,执行函数后:当前记录为:
H读第一个符合过滤器的第一个数据库表记录
H读最后一个符合过滤器的第一个数据库表记录
H读下一个 (or H前进)H读上一个 (or H后退)
H读上一个 (or H后退)符合过滤器的上一个记录(或上N条记录)

选择条件

一个条件的一般语法的格式如下:

"客户名称>'Smith'并且(ZipCode=34或ZipCode=32)"

支持的运算符取决于在条件中使用的字段类型:

<>不等于适应于所有类型的变量
>大于适应于所有类型的变量
>= 大于或等于适应于所有类型的变量
<小于适应于所有类型的变量
<= 小于或等于适应于所有类型的变量
 = 严格等于适应于所有类型的变量
~= 约等于 不考虑右边的空格,重音和字符大小写仅适应于字符串类型的变量
~~略等于: 不区分字符的大小写,忽略位于要测试的字符串前后的空格,忽略小写重音字符,忽略字符串内部的空格和标点符号。仅适应于字符串类型的变量
]包含: 考虑字符大小写仅适应于字符串类型的变量
~]包含: 忽略字符大小写仅适应于字符串类型的变量
]= 开始于: 考虑字符大小写仅适应于字符串类型的变量

关于选择条件的注意事项
  • 字符串常量需加上单引号。
  • 若<字段名称>包含单引号,则它们需要为双引号。
    例如: ‘item‘‘with‘‘quotes‘
  • 字符串之间的比较取决于为下标指明的参数。
  • 二进制大对象和组合键无法作为一个选择条件。
    对于组合键,我们建议您使用第一个语法。 您无法使用下列语法:
    H过滤器FILENAME"COMPKEY~]'AAA'并且COMPKEY]='" +...
    H创建键值FILENAMECOMPKEY0) + "'"
  • 若一个字符串(常量或变量)包含一个单引号,那么必须在该单引号前加上一个反斜杠(\)。
  • 若想优化过滤器的浏览,请在创建过滤器之前,在数据库表上使用函数H统计。 HFSQL引擎会对选择条件进行分析,然后使用得到的数据来确定最具有识别性的可以对数据库表进行优化的字段。
  • 该选择条件可以是一个Ansi格式或Unicode格式的字符串。

启用/禁用一个过滤器

函数H禁用过滤器用于禁用一个过滤器。

函数H启用过滤器可以重新启用一个过滤器。

当数据库表(查询或视图)被关闭时(例如函数H关闭),那么过滤器会被删除。

同一时刻,在一个数据库表(查询或视图)上只能存在一个过滤器。 若函数H过滤器被使用了多次,那么只有最后一次有效: 之前的都将被删除。

WinDevWindows Store apps用户代码(MCU)HFSQLHFSQL Client/Server存储过程

一个组合键上的过滤器

若想在一个组合键上创建一个过滤器,有以下多种方法:
  • 方法1: 在函数H过滤器中使用一个数值列表。
  • 方法2: 使用指令对于所有
  • 方法3: 使用函数H创建键值
  • 方法4: 使用函数H转换数值(用于兼容WinDev 5.5)
若想获取更多关于使用过滤器中的组合键的信息,请查阅组合键与过滤器

方法1的使用示例: 使用一个数值列表

需在上面启用过滤器的组合键的数值可以通过以下语法直接在函数H过滤器中创建:

H过滤器(<文件名称>,<组成键的名称>,
[<组成键的最小边界值的列表>],
[<组成键的最大边界值的列表>])

例如: 查找表CUSTOMER中姓介于"AA"和"Barnaby",名介于"Philomene"和"Tartuffe"的所有记录。

H过滤器CustomerLastNameFirstName, 【"AA""Philomene"】, 【"Barnaby""Tartuffe"】)

在该例子中,"AA","Zorro"被过滤器返回而"Philomene","Zorro"不会被返回。

例如: 查找表Taches中任务介于15/03/2011 00h00与25/03/2011 00h00之间的所有记录。

H过滤器TasksTaskStarDateTaskStartTime, 【201103150000】, 【201103250000】)

WinDev用户代码(MCU)存储过程OLE DB本地访问

非HFSQL数据库表

组件
WinDev wd200hf.dll
Linux wd200hf.so