SQL表达式的语法差异

Foxtable中所有和动态加载的相关的属性和方法,包括那些直接统计或处理后台数据的方法,其条件表达式的语法均为SQL语法,且表达式中的表名和列名必须和后台数据库保持一致。
采用的数据源不同,SQL语法会有一些细节产别。
关于SQL,后面有专门一章介绍,现在先介绍一下SQL表达式和常规表达式的几个主要差异:

1、不能使用*作为通配符,只能使用%作为通配符,例如:

DataTables("客户").LoadFilter = "公司名称 Like '%贸易%'"
DataTables(
"客户").Load()

2、 如果数据源是SQL Server,日期用单引号括起来,而不是用#,例如:

DataTables("订单").LoadFilter = "日期 = '" & Date.Today & "'"
DataTables(
"订单").Load()

如果是内部表或Access数据源,日期还是用符号#括起来:

DataTables("订单").LoadFilter = "日期 = #" & Date.Today & "#"
DataTables(
"订单").Load()

3、SQL Server中的逻辑列,用0表示False,1表示True,例如加载已经结账的订单:

DataTables("订单").LoadFilter = "结账 = 1"
DataTables(
"订单").Load()

如果是如果是内部表或Access数据源,还是用True和False表示逻辑值,例如:

DataTables("订单").LoadFilter = "结账 = True"
DataTables(
"订单").Load()

4、常规表达式的函数非常有限,而SQL的函数更加丰富,但是不同的数据源,函数有些差别。

如果数据源是SQL Server,可以使用以下函数:
http://www.foxtable.com/help/topics/1827.htm

如果是内部表或Access数据源,可以使用以下函数:
http://www.foxtable.com/help/topics/0692.htm

例如,用SQLCompute统计2013年的销售数量:

Dim
Val As Integer
Val
= DataTables("订单").SQLCompute("Sum(数量)", "Year(日期) = 2013")

如果用Compute统计,表达式会长很多,而且必须已经加载2013年的全部数据:

Dim Val As Integer
Val
= DataTables("订单").Compute("Sum(数量)", "日期 >= #1/1/2013# And 日期 <= #12/31/2013#")


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