深入CursorAdapter(三)
大型计算机等级站布置的检查:
VFP程序员长期以来一直想要一个可重用的数据类。虽然在过去的版本中有很多解决这个问题的方法,但总是存在一些缺陷。现在在VFP 8中,我们有了一个真正可重用的数据类。这个月,Doug向我们展示了如何通过对CursorAdapter和DataEnvironment进行子类化来构建可重用的数据类,以及如何在表单和报表中使用它们。
文本
××
在过去的两期中,我们讨论了VFP 8中新的CursorAdapter基类。我个人的看法是,这是VFP 8最重要的变化之一,因为它为我们提供了一个简单易用的统一接口,用于SQL Server等非VFP数据源。此外,正如您在这个月所看到的,它们也构成了可重用数据类的基础。
在讨论可重用数据类之前,我们先来看看我建立的CursorAdapter和DataEnvironment的一些子类。我给它们添加了一些额外的函数,它们将成为我们可重用数据类的起点。
SFCursorAdapter
SFSorAdapter(在附件SFDataClasses.vcx中)是CursorAdapter的一个子类,它有一些附加功能,如下所示:
它可以自动处理参数化查询:可以静态(常量)或动态(表达式,如“= =Thisform.txtName.value”,在光标打开或刷新时会进行运算)定义一个参数值。※.
它可以在光标打开后自动对其进行索引。※.
对于ADO,它还将执行一些特殊的工作,例如将DataSource属性设置为ADO记录集,并将该记录集的ActiveConnection属性设置为ADO Connection对象。当使用参数化查询时,它还会创建一个ADO命令对象,并将其传递给CursorFill方法。※.
它提供简单的错误处理(cErrorMessage属性中会有错误信息)。※.
它还有CursorAdapter所没有的Update和Release方法。※.
这个类的INIT方法创建了两个集合(使用新的Collection基类,用于维护某物的集合),一个用于SelectCmd属性可能使用的参数,另一个用于光标打开后应该自动创建的标记。它还将MULTILOCK设置为ON,因为这是CursorAdapter Cursor的要求。
this . oparameters = CreateObject(' Collection ')
this . otags = CreateObject(' Collection ')
设置多锁
AddParameter方法添加一个类似parameters集合的参数。将参数的名称传递给这个方法(这个名称应该与参数在SelectCmd属性中出现的名称一致),也可以根据需要附加参数的值(如果现在不将参数的值传递给它,可以在以后调用Getparameter方法来这样做)。这段代码演示了VFP 8中的一对新函数:新的空基本类,它没有属性、事件或方法,因此是构建轻量级对象的理想选择;还有AddProperty()函数,它类似于AddProperty方法,只是它用于那些没有这个方法的对象。
lparameters tcName,tu value
local lo parameter
lo parameter = createobject(' Empty ')
add property(lo parameter,' Name ',tcName)
add property(lo parameter,' value ',tu value)
this . oparameters . add(lo parameter,TC Name)
使用GetParmeter方法返回一个特殊的parameter对象——通常在需要设置参数值时使用。
lparameters TC name
local lo parameter
lo parameter = this . oparameters . item(TC name)
return lo parameter
connection方法用于将DataSource属性设置为所需的连接。如果DataSourceType为“ODBC”,则向该方法传递一个连接句柄。如果是“ADO”,DataSource必须是ADO Recordset对象,对象的ActiveConnection属性必须设置为活动的ADO Connection对象,所以我们需要将这个ADO Connection对象传递给SetConnection方法。Set创建一个记录集,并将该记录集的activeSetConnection设置为传递的ADO Connection对象。
lparameters tuConnection
与此
do case
case。DataSourceType = 'ODBC'
。data source = tu connection
case。DataSourceType = 'ADO'
。DataSource = Createobject('ADODB。RecordSet ')
. data source . active connection = tu connection
end case
end with
0条评论