在第1章中已经说明了如何使用TClientDataSet控件,上一章我们借助设定SQL语句到TClientDataSet的CommandText属性值中便可以从后端数据源中取得数据。本节将进一步说明如何使用动态SQL语句来存取和处理数据。
步骤1 建立数据模块和dbExpress控件
首先在Delphi集成开发环境中点击File|New|VCL Forms Application-Delphi For Win32,再点击File|New|Other…菜单,在New Items对话框中点击建立Data Module图像,建立一个稍后容纳dbExpress控件的数据模块,如图2-1所示。

图2-1 建立数据模块
在空白的数据模块中加入一个TSQLConnection控件,设定它的Name属性值为scnnDemo。双击TSQLConnection控件以启动它的控件编辑器,并且连接到InterBase范例数据库D2006HDBP.GDB,如图2-2所示(D2006HDBP使用Add Connection建立的InterBase连接,请读者自行建立,并且设定ServerCharSet属性值为空白)。
在数据模块中放入一个TSQLDSet控件,设定它的Name属性值为sdsBooks,设定它的DBConnection属性值为scnnDemo,再设定sdsBooks的CommandText属性值为select * from BOOKS。现在我们已经借助dbExpress控件从InterBase中取得BOOKS数据表中的数据。在这之后就需要使用DataSnap技术把dbExpress单向、只读的数据变成可以进行任何变更的正常数据集了,这需要使用Delphi中Data Access控件类中的TDataSetProvider以及TClientDataSet控件的帮忙。

图2-2 启动TSQLConnection控件的控件编辑器
先在数据模块中加入一个TDataSetProvider,取名为dspBooks,设定它的DataSet属性值为sdsBooks,再放入一个TClientDataSet,取名为cdsBooks,设定它的ProviderName属性值为dspBooks。此时这三个控件已经能够从BOOKS数据表中取得数据了。现在我们需要再放入另外一组这三个控件以存取PUBLISHERS数据表,这一组三个控件的设定如表2-4所示。
表2-4
|
控件 |
控件名称 |
设定的属性值 |
|
TSQLDataSet |
cdsPublishers |
SQLConnection = scnnDemo |
|
TDataSetProvider |
dspPublishers |
DataSet = cdsPublishers Options|poAllowCommandText = True |
|
TClientDataSet |
cdsPublishers |
ProviderName = dspPublishers CommandText = select * from PUBLISHERS where VID = :VID Params设定VID = ftString |
cdsPublishers在CommandText属性值中使用的SQL语句:select * from PUBLISHERS where VID = :VID,称为动态SQL,因为在这个SQL语句中定义了一个参数:VID。这个参数的数值会在应用程序执行时动态地传入,再根据这个参数值从PUBLISHERS数据表中取得VID字段拥有传入参数值的数据。当然,在这个SQL语句中参数名称VID可以命名为其他的名称,例如:ID1或是:PID。在SQL语句中动态是以
:参数名称
形式定义的,而且在SQL语句中可以使用多个动态参数。
dbExpress控件的TSQLDataSet、TSQLQuery、TSQLStoredProc和TSimpleDataSet都允许开发人员使用动态参数的SQL语句来存取数据。此时范例应用程序的数据模块看起来如图2-3所示。

图2-3 范例应用程序的数据模块
由于cdsPublishers控件定义了动态参数,因此它会自动分析SQL语句,并且从其中取得所有的动态参数,然后储存在TClientDataSet控件的Params属性值之中。我们可以点击cdsPublishers控件,然后在对象查看器中双击它的Params属性,那么Delphi便会显示cdsPublishers定义的动态参数。例如图2-4便是双击cdsPublishers控件的Params属性之后,Delphi显示的参数对话框,其中列出了VID这个动态参数。此时开发人员可以点击此动态参数,然后在对象查看器中设定此动态参数的属性值。图2-4显示了VID是一个输入参数,我们需要设定它的数据类型是字符串(ftString)。

图2-4 cdsPublishers控件在Params属性值中定义的动态参数






