名称:

Advanced Find | 高级查询

图标:

Advanced Find高级查询 - 图1

功能:

  • 可以自定义条件的查询
  • 按各种条件查询生成数据库记录,可以设计包含And Or = <> > >= < <= like以及is null或is not null符号的查询条件
  • 可以添加一个或多个输入元件并将特定值传入作为查询参数来处理
  • 要查询的数据库中的表/视图是由输出的数据库表记录元件的“tableName”属性值来确定的
  • 如果需要直接查询全部数据或简单的等值查询,请参考“Find查询”,如果需要更复杂的查询,请参考使用语句查询“SQL查询”元件
  • 了解数据库表记录元件如何与数据库中库表相关联,请参考“可视化元件手册”的“Database Record 数据库表记录”中的说明

    使用方式:

    设计查询条件查询记录

    输入:

  • <Match><From><To>:数据库表记录类型的输入,单数,非必须项;这三个输入用带部分值或全部值的记录对象输入来做为查询参数
    · 传入<Match>输入项的数据库表记录中,如果有输入某些字段特定值,则执行时查询时获取与有输入内容的字段名称和字段值一致的记录,相当于一个或多个等值查询条件;如果某些子元件没有输入特定值,则忽略此字段不做为对比筛选条件
    · 传入<From>输入项的数据库表记录中,如果有输入某些字段特定值,则执行时查询时获取大于等于有输入内容对应字段的值的记录
    · 传入<To>输入项的数据库表记录中,如果有输入某些字段特定值,则执行时查询时获取小于等于有输入内容对应字段的值的记录
    · 用<Match>处理时,可以设计为模糊查询处理,如果传入的数据库记录对象中A名称字段值是5,则实际处理时的查询语句为 “A=’5’”,但如果传入的值为“5%”,含有%符号,则语句为“A Like ‘5%’”

  • <Filter>:字符类型值的输入,单数,非必须项;用来将筛选条件传入此输入元件
    · 一个简单的筛选条件用法是将字段名称,对比值和对比符号写入一个字符常量元件中,传入<Filter>即可,比如我们数据库表中有“Xing_Bie”和“Nian_Ling”字段,如果要查性别为男的记录,则条件写为“Xing_Bie=’男’”就行,如果要查年龄大于30的男性,则条件为“Xing_Bie=’男’ and Nian_Ling>30”,对比符号可以是“> >= < <= = like 及 is null / is not null”等,可以用 “and or”等连接不同字段条件
    · 以上条件实际上是SQL语句 “WHERE…”中的内容,用TERSUS无代码处理时,不需要懂SQL语句,只需要理解以上说明和符号用法即可
    · 注意条件中字段名称是数据库中库表字段名,应完全一致,输出的数据库表记录对象的子元件名称与库表字段名称是有区别的,空格会用下划线替换(字段名称实际是数据库表记录元件的子元件的role属性值)
    · 可以设计更加灵活的由添加的更多输入元件内容作为条件参数的查询语句,此时查询条件中特定值用“${参数名称}”来做参数替换,输入元件用“参数名称”命名,如以上查询中,可以将姓别和年龄分别作为动态参数,设计名称为“xb”和“nl”的两个输入元件(英文输入法下按“t”放入输入元件,按F2弹窗中输入名称),然后条件文本写为“Xing_Bie=’${xb}’ and Nian_Ling>${nl}”,注意需符合以下规范:

    SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号

· 条件文本还可以用传入参数的模板来单独生成,条件语句是文本类型,所以条件中字符值用小引号括入,数字可以直接写入,这是SQL以上规范要求;但是如果要将日期或日期时间传入进行处理,一个方式是日期和日期时间必须用添加输入元件作为参数传入方式处理日期参数值的输入;另一个方式是将数据库中的日期和日期时间字段设计为文本型,日期用8位字符来定义,查询条件可以写为文本简单化操作

  • <Start From>:数据库表记录类型的输入,单数,非必须项;<Start From>对查询后的输出内容进行限制,也就是查询得到的所有结果应从数据库中哪一条记录开始输出,在做分页显示表格时,下一页数据的查询中用此输入项来处理更加方便(可以同时配合<Number of Matches>输入数字来限制输出记录数量)
  • <Offset>:数字类型值的输入,单数,非必须传值;输入一个数字,用来设定将查询结果中的前面多少个记录跳过不输出
    · <Offset>功能与<Start From>一样,使用取决于应用场景
    · <Offset>和<Start From>可以同时使用,此时由<Start From>指定的记录开始,跳过<Offset>值数量的记录后再输出
    · 如果<Offset>和<Start From>都没有使用,则等同于<Offset> =0
  • <Backward>:布尔类型的输入,单数,非必须项;获取最后一组符合要求的记录
    · 配合<Number of Records>输入项有输入数字N时,使用<Backward>项的定义,当<Backward>输入为Yes布尔常量值时(只能输入Yes或No布尔值),输出最后一组N个符合要求的记录,没有添加<Backward>输入元件或其输入值为No时,输出结果为第一组N个记录,在设计表格分页显示时很有用
  • <Order By>:字符类型值的输入,单数,非必须项;可用来定义排序字段和按字母升序或降序方式输出查询的记录,排序条件文本放入一个字符常量元件,常量元件传入此输入元件
    · 无值或无<Order By>定义时按记录在数据库中插入顺序输出
    · 排序条件文本中写入要按哪个子段排序的子段名称,即可排序
    · 多个字段排序时,可以用英文逗号隔开各个字段名称,前后依次写入,注意前面写入的优先
    · 如果需要降序排序,则在文本常量中字段名称后写“DESC”,如“ID DESC”,按ID字段值降序排序,如果升序,名称后可以写“ASC”如“XingMing ASC”,只有字段名称默认就是升序
    · 多个字段不同顺序要求时,可以写为“NianLing DESC,XingMing ASC”
    · 注意排序是按字段内容值对应的字母处理的,如果是汉字,则只能将同一汉字开始的放在一起,并不能按汉语拼音处理,需要修改此元件底层代码,必要时用拼音字母加汉字方式处理,然后再进行排序
  • <Number of Records>:数字类型值的输入,单数,非必须项;用来定义最多输出多少条记录,符合要求的记录数少于此输入数字时全部输出
  • <Optimization>:字符类型值的输入,复数,非必须项;传入一些固定的文本来修改默认的查询处理规则
    · “No Number of Matches”—执行查询时为了输出<Number of Matches>数字,元件中是有一个Select语句单独查询计算符合条件的记录个数来输出数字的,传入此文本后,则不再处理此数量查询计算功能,可以节省处理时间和计算机资源
    · “No Position”—传入此文本后,同上,执行查询时不再运行为了输出<Position>而运行的Select单独查询计算功能
    · “No Records”—传入此文本后,同上,执行时不再运行为了输出<Records>而运行的Select主查询处理,如在只需要知道符合条件的记录数字时使用
    · “CTE”—只针对SQL Server数据库,传入此文本后,会将所有查询输入项和查询条件转换为库表查询通用的SQL Server表达式语句
    · “option…”—只针对SQL Server数据库,传入此文本后,会将此输入作为类似 OPTION 的语句片断,放入后台查询语句中
  • <Table>:字符类型值的输入,单数,非必须项;用来指定在哪个数据库表中进行处理,输入的字符常量值是数据库表的名称,此时会忽略<Records>输出的数据库表记录元件的“Table Name”属性值对应的库表名称,或者是当输出为一个Map对象时用此来确定查询库表名称
    · 也支持带参数的数据库表查询处理
  • <Columns>:字符类型值的输入,单数,非必须项;用来指定输出记录中包含哪些字段,将多个字段的名称用英文逗号隔开放入同一个字符常量元件中传入
    · 这个是在<Records>输出为Map类型数据结构时使用
  • <Data Source>:字符类型值的输入,单数,非必须项;用来指定在哪个数据库中进行记录查询操作,用一个字符常量传入数据库名称,常量值是项目配置文件设定的某个数据库名称,无此输入元件则默认为对项目主数据库进行处理
  • <Auto Commit>:布尔类型值的输入,单数,非必须项;控制操作数据库处理是否为立即进行数据库信息变更处理的模式;查询处理一般无需此定义,因为不涉及记录变更;注意这与TERSUS开发时数据库处理默认操作模式不同;如果输入为Yes,则在生成新序列号时会立即进行数据库中值的变更处理:
    · TERSUS默认的数据库执行模式是,在同一个Service服务器端处理(包括Secured Service)中,如果全部逻辑完成无异常,数据库才会执行相关操作,如果中间中断,或部分处理后报错/中断,则全部数据退回执行前状态,也就是默认成功完成全部逻辑处理才会更新数据库值

    输出:

  • <Records>:数据库表记录类型的输出,复数,必须项;用于将记录输出到数据库表类型的数据结构对象中,一个对象包含一条记录
    · 数据库表记录类型对象的“tableName”属性值是元件触发时应查询的对应的库表或视图的名称
    · 这个输出对象也可以用Map对象替换,此时输入项中<Table>输入元件必须添加且有表名称传入

  • <None>:空值输出,单数,非必须项;用于完成处理但没有任何结果时传出空值
  • <Number of Matches>:数字类型值的输出,单数,非必须项;输出数字为查询处理得到符合条件的记录的个数
  • <More>:空值输出,单数,非必须项;用于输出一个识别是否除了<Records>输出记录外,还有符合查询条件的记录(有符合条件但未输出的记录)
    · 这个在分页显示记录的处理中很有用,可以用此输入来判断是否显示“下一页”或“更多”按钮
  • <Position>:数字类型值的输出,单数,非必须项;输出一个数字,是<Records>输出记录的第一条记录的序号数字
    · 这个序号是基于查询条件和排序标准计算的,与<Offset>和<Start From>设定直接相关,比如没有添加<Start From>输入元件,<Offset>的输入值为20,那么<Position>输出值应会是20
    · 上面也提到过,这个值的输出是需要在执行操作时运行额外的一个SQL语句来得到结果,要求<Position>输出元件已添加,并且<Optimization>输入中的值不含“No Position”文本常量时,才执行<Position>输出数字的运算处理
  • <Output Columns>:固定数据结构的输出,复数,非必须传值;固定数据结构是包含两个子对象的数据结构(含固定名称“Name”和“Type”的字符类型/变量子元件),输出<Results>的结果中的字段名称和类型名称
    · 输出结果是一固定格式的数据结构对象,名称为“Column Descriptor”,此对象可以选中<Output Columns>输出元件,右键单击元件并在弹出的菜单中选“Show in Respository Explorer”在项目目录中的元件模板中找到数据结构对象并拖放入开发区与<Output Columns>输出连线传值
    · <Output Columns>输出的结果是将所有的字段名和对应的数据类型名称放入到“Column Descriptor”数据结构对象中(名称值传入Name和Type两个子元件),每个对象含一组字段的名称和类型信息
    · 这个输出在<Records>输出为Map类型时使用
  • 注意,<Records>和 <None>是两个非此即彼的输出,即如果输出至少一条以上记录,则<None>没有空值输出;如果没有记录输出,<None>输出空值来标记没有记录

    示例:

    案例一:带参数的条件查询文本处理的高级查询

    任意一个项目的目录“Common/Templates/Database/Advanced Find/Test1/Find People My Age”中:
    Advanced Find高级查询 - 图2

    案例二:带等输入的高级查询

    任意一个项目的目录“Common/Templates/Database/Advanced Find/Database Test 10/Database Test 10”中:
    Advanced Find高级查询 - 图3

    案例三:带等输入的高级查询

    任意一个项目的目录“Common/Templates/Database/Advanced Find/Database Test 13/Run Query”中:
    Advanced Find高级查询 - 图4

    案例四:有多个输入元件有多个输出对象的高级查询

    任意一个项目的目录“Common/Templates/Modules/Rich Table/Template/Populate Table/Query and Parse/Parameter-based Advanced Find”中:
    Advanced Find高级查询 - 图5