SQLFind

SQLFind和Find类似,用与查找符合条件的行,如果找到的话,返回找到的行,否则返回Nothing。
不过Find是在DataTable查找符合条件的行,而SQLFind是在后台数据库中查找。

语法:

SQLFind(Filter,Sort,Index)

Filter:  条件表达式,采用的是SQL语法,和常规表达式的语法有所不同,请参考:SQL表达式的语法差异
Sort:    可选参数,指定排序方式。
Index:   可选参数,指定返回第几个符合条件的行,0表示第一行。

示例一:

Dim dr As DataRow
dr =
DataTables("产品").SQLFind("产品编号 = '03'") '找出编号为03的产品
With DataTables(
"订单")
    dr = .SQLFind(
"产品 = 'PD01'","日期") '找出第一次订购PD01产品的记录
    dr = .SQLFind(
"产品 = 'PD01'","日期",1) '找出第二次订购PD01产品的记录
End With

示例二:

有的时候,我们需要查找倒数第几行数据,例如最近一次订购某产品的记录。
可以参考下面的代码:

Dim dr As DataRow
With DataTables("订单")
    dr
= .SQLFind("产品 = 'PD01'","日期 Desc")
'找出最后一次订购PD01产品的记录
   
dr = .SQLFind("产品 = 'PD01'","日期 Desc",1) '找出倒数第二次订购PD01产品的记录
End With

可以看到代码和原来几乎一样,唯一的变化是排序参数,被改为:日期 Desc
加上DESC使得日期按照降序排序,最后的日期排在最前面,我们所找出的第一条记录,就是最后一次订购产品PD01的记录。

示例三

通常应该在代码中判断是否找到了符合条件的行,然后再运行后续的代码。
例如要找出最近一次订购产品数量超过1000的订单,并显示订单的日期和客户:

Dim dr As DataRow
dr =
DataTables("订单").SQLFind("数量 > 1000","日期 Desc")
If
dr IsNot Nothing Then '如果找到的话
    Output.Show(
"日期:" & dr("日期"))
    Output.Show(
"客户:" & dr("客户"))

End If

如果我们不加上判断,直接:

Dim dr As DataRow
dr =
DataTables("订单").SQLFind("数量 > 1000","日期 Desc")
Output.Show(
"日期:" & dr("日期"))
Output.Show(
"客户:" & dr("客户"
))

一旦订单表并不存在订购数量超过1000的订单,那么Find方法返回Nothing,导致后续代码运行出错。

示例四

可以修改并保存SQLFind查找出来的行,例如:

Dim dr As DataRow
dr
= DataTables("订单").SQLFind("数量 > 1000","日期 Desc")
If
dr IsNot Nothing Then '如果找到符合条件的行
    dr("折扣") = 0.14
    dr.Save()

End
If

SQLFind每次只能找出一条符合条件的行,如果要同时找出所有符合条件的行,可以使用SQLSelect方法。


本页地址:http://www.foxtable.com/webhelp/topics/2911.htm