编写通用代码
我们知道不同的数据源,其SQL语句的语法会有所差异。
最常见的差异有两个,之前已经介绍过,为了巩固,下面再复述一遍。
日期值的差异
对于内部数据源和Access数据源,日期用符号#括起来,例如:
SELECT * FROM {订单} WHERE 日期 >= #1/1/1999# AND 日期 <= #1/31/1999#
如果数据源是SQl SERVER,日期常量用单引号而不是#号括起来,例如:
SELECT * FROM {订单} WHERE 日期 >= '1/1/1999' AND 日期 <= '1/31/1999'
逻辑值的差异
此外对于逻辑值,内部数据源和Access数据源采用True和False,例如:
SELECT * FROM {订单} Where 结账 = True
如果是SQL Server数据源,则用0表示False,1表示True,例如
Select * From {订单} Where 结账 = 1
表示查询出已经结账的订单。
如果要查询未结账的订单,则应该为:
Select * From {订单} Where 结账 = 0
为数据源编写通用代码
不同数据源之间的语法差异,使得我们启用一个新的数据源后,往往需要重新修改相关代码。
不过Foxtable很好地解决了这个问题。
数据源(Connection)有一个SourceType属性,整数型,用于返回数据源的类型,1表示Access,2表示SQL Server,3表示Oracle。
示例:
If
Connections("nwnd").SourceType
= 1 Then
'Access数据源
Tables("窗口1_Table1").Fill("Select
* From 订单 Where 日期 = #" &
Date.Today
& "#","nwnd",False)
ElseIf
Connections("nwnd").SourceType
= 2 Then
'SQL Server数据源
Tables("窗口1_Table1").Fill("Select
* From 订单 Where 日期 = '" &
Date.Today
& "'","nwnd",True)
End
If
上述代码,不管你是Access还是Sql Server数据源,都能正常将当天的订单加载到窗口的Table控件中。
为DataTable编写通用代码
DataTable同样有一个SourceType属性,整数型,用于返回数据源的类型,1表示内部表或Access,2表示SQL Server,3表示Oracle。
示例
Dim
dt
As
DataTable =
DataTables("订单")
If
dt.SourceType =
1
Then
'Access数据源
dt.LoadFilter =
"日期 = #"
& Date.Today
& "#"
ElseIf dt.SourceType
= 2
Then
'SQL Server数据源
dt.LoadFilter =
"日期 = '"
& Date.Today
& "'"
End If
dt.Load()
上述代码,不管使用的是内部表,还是Access数据源,或者Sql Server数据源,都能正常将当天的订单加载到订单表中。