首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.1.6  使用动态SQL语句处理数据

在第1章中已经说明了如何使用TClientDataSet控件,上一章我们借助设定SQL语句到TClientDataSetCommandText属性值中便可以从后端数据源中取得数据。本节将进一步说明如何使用动态SQL语句来存取和处理数据。

步骤建立数据模块和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,再设定sdsBooksCommandText属性值为select * from BOOKS。现在我们已经借助dbExpress控件从InterBase中取得BOOKS数据表中的数据。在这之后就需要使用DataSnap技术把dbExpress单向、只读的数据变成可以进行任何变更的正常数据集了,这需要使用DelphiData 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

cdsPublishersCommandText属性值中使用的SQL语句:select * from PUBLISHERS where VID = :VID,称为动态SQL,因为在这个SQL语句中定义了一个参数:VID。这个参数的数值会在应用程序执行时动态地传入,再根据这个参数值从PUBLISHERS数据表中取得VID字段拥有传入参数值的数据。当然,在这个SQL语句中参数名称VID可以命名为其他的名称,例如:ID1或是:PID。在SQL语句中动态是以

:参数名称

形式定义的,而且在SQL语句中可以使用多个动态参数。

dbExpress控件的TSQLDataSetTSQLQueryTSQLStoredProcTSimpleDataSet都允许开发人员使用动态参数的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属性值中定义的动态参数