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#")