本节的范例将会展示如何使用TSQLDataSet控件来执行DDL语句,在InterBase的数据库中动态建立数据表以及索引,并且删除数据表。
步骤1 建立数据模块和dbExpress控件
在Delphi集成开发环境中点击File|New|VCL Forms Application建立一个新的Delphi.Win32应用程序。接着点击File|New|Others…|Data Module建立空白的数据模块。在此数据模块中加入TSQLConnection控件,连接到范例数据库D2006HDBP,接着放入3个TSQLDataSet控件,一个命名为sdsRunDDL,另外一个命名为sdsDropTable,最后一个命名为sdsCreateIndex。然后放入一个TSimpleDataSet控件,命名为scdsQuery并且设定它的CommandText属性值为select * from Books,此时数据模块如图2-29所示。

图2-29 范例应用程序的数据模块
在sdsRunDDL控件的CommandText属性值中加入如下的SQL语句。这个SQL语句会在数据库中建立一个名为MYESSAYS的数据表。
CREATE TABLE MYESSAYS (
EID INTEGER NOT NULL,
ETITLE VARCHAR(60),
MAGAZINE VARCHAR(60),
PDATE DATE,
CONTENTS BLOB sub_type 0 segment size 80,
NOTES VARCHAR(100));
在sdsCreateIndex控件的CommandText属性值中加入如下的SQL语句。这个SQL语句会在MYESSAYS数据表中建立一个以EID字段为基础的主索引对象。
ALTER TABLE MYESSAYS ADD PRIMARY KEY (EID);
最后一个sdsDropTable控件则是执行DROP Table SQL语句以删除由sdsRunDDL动态建立的数据表。
DROP TABLE MYESSAYS
步骤2 建立范例主窗体
回到范例应用程序的主窗体,在其中放入TDataSource连接到刚才的数据模块中的scdsQuery,再放入TDBNavigator和TDBGrid。最后放入两个TButton控件,一个设定Caption属性值为“建立数据表”,另外一个设定Caption属性值为“删除数据表”。此时主窗体如图2-30所示。

图2-30 范例应用程序的主窗体
步骤3 实现范例应用程序
双击主窗体中的【建立数据表】按钮,并且在它的OnClick事件处理函数中撰写如下的程序代码:
dmRunDDL.sdsRunDDL.ExecSQL(False);
dmRunDDL.sdsCreateIndex.ExecSQL(False);
dmRunDDL.scdsQuery.Active := False;
dmRunDDL.scdsQuery.CommandText := 'Select * from MyEssays';
dmRunDDL.scdsQuery.Active := True;
在上面的程序代码中,执行了sdsRunDDL控件中的SQL语句。由于sdsRunDDL控件的SQL语句是不返回结果数据集的Create Table语句,因此我们必须调用TSQLDataSet的ExecSQL方法,而不是Open方法。
ExecSQL方法的原型如下:
function ExecSQL(ExecDirect: Boolean = False): Integer; override;
ExecSQL方法是用来执行不返回结果数据集的SQL语句或是属于DDL的SQL语句。它接受一个参数ExecDirect,这个参数代表TSQLDataSet在执行SQL语句之前是否需要先准备(编译)这个SQL语句。 如果ExecDirect是False,就代表要先准备(Prepare)SQL语句,如果ExecDirect是True,则代表直接执行SQL语句而不需要先准备。如果开发人员需要数次执行相同的SQL语句,那么传递False给ExecSQL方法是比较好的。
当sdsRunDDL执行完毕之后,MyEssays数据表应该就被建立了,因此上面的程序代码再指定Select * from MyEssays给scdsQuery,并且打开MyEssays数据表。如果sdsRunDDL正确而且成功地执行,那么在范例应用程序中的TDBGrid中便应该可以看到MyEssays这个数据表了。
接着双击主窗体中的【删除数据表】按钮,并且在它的OnClick事件处理函数中撰写如下的程序代码:
dmRunDDL.sdsDropTable.ExecSQL(False);
上面的程序代码调用了sdsDropTable的ExecSQL执行储存在sdsDropTable控件中的SQL语句,以删除MyEssays数据表。
步骤4 执行范例应用程序
现在可以编译并且执行范例应用程序了。图2-31就是执行范例应用程序的情形,在一开始时范例应用程序显示了Books数据表中的数据。当我们点击了【建立数据表】按钮之后,范例应用程序会动态建立MyEssays数据表,并且打开它显示在TDBGrid中。


图2-31 执行范例应用程序的画面
现在如果到数据库管理工具中检查,便可以看到类似图2-32所示的画面,证明了范例应用程序果然在数据库中成功动态建立了MyEssays数据表。
这个范例应用程序展示了如何使用TSQLDataSet动态建立数据表,随后的章节会继续讨论如何使用TSQLQuery控件在动态建立的数据表中新增数据。

图2-32 范例应用程序在InterBase 7.5中建立了MyEssays数据表






