编写通用代码

我们知道不同的数据源,其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数据源,都能正常将当天的订单加载到订单表中。


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