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

2.3.3  执行SQL Script

本节要展示的范例是让TSQLDataSetTSQLQuery执行与2.2.1节一样的功能,只是本节的范例能够一次执行数个SQL语句,而无需一次执行一个SQL语句。

步骤建立数据模块和dbExpress控件

Delphi集成开发环境中点击File|New|VCL Forms Application,再点击File|New|Other…菜单,选择建立Data Module图像,以建立一个数据模块。接着在此数据模块中加入TSQLConnection控件,连接到范例数据库D2006HDBP,加入TSimpleDataSet控件,设定它的DataSet\CommandText属性值为select * from MYESSAYS。加入TSQLDataSet控件和一个TSQLQuery控件,如图2-35所示。当然,这些控件都需要设定连接到数据模块中的TSQLConnection控件。

2-35  范例应用程序的数据模块

本范例要执行的SQL Script如下:

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));

 

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (1, '2001
 
年软件巨星-Kylix', 'RUN!PC 2001/3', '03/05/2001', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (2, 'Windows
 
原生开发工具的瑰宝-Delphi 7', 'RUN!PC 2001/6', '05/05/2001 ', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (3, 'So much
  fun, So many possibilities', 'RUN!PC 2001/7', '06/05/2001', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (4, '肥皂的
  
战争与和平', 'RUN!PC 2001/8', '07/05/2001 00:00:00', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (5, '.NET
 
SOAP', 'RUN!PC 2001/9', '08/05/2001', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (990, '我的
 
回忆和有趣的故事', 'Programmer 深度论坛', '03/01/2001', NULL);

INSERT INTO MYESSAYS (EID, ETITLE, MAGAZINE, PDATE, NOTES) VALUES (991, '我的
 
回忆和有趣的故事续之一', 'Programmer 深度论坛', '04/01/2001', NULL);

 

ALTER TABLE MYESSAYS ADD  PRIMARY KEY (EID);

CREATE INDEX MYESSAYS_IDX1 ON MYESSAYS (ETITLE);

CREATE INDEX MYESSAYS_IDX2 ON MYESSAYS (PDATE);

这个SQL Script会建立MyEssays数据表、新增数笔数据,再建立主键值以及数个索引对象。[2]

步骤建立主窗体

回到范例应用程序的主窗体。在主窗体中加入一个TMemo控件以显示要执行的SQL Script。放入TDataSource连接到数据模块中的TSimpleDataSet控件,放入TDBNavigatorTDBGrid并且连接到TDataSource。放入一个TOpenDialog控件以便打开SQL Script文件。最后放入两个TButton控件,一个加载SQL Script文件,而另外一个则负责运行加载的SQL Script。这个范例应用程序的主窗体如图2-36所示。

2-36  范例应用程序的主窗体


现在我们就可以开始实现这个范例应用程序了。

步骤加入实现程序代码

首先双击主窗体中【加载Script】按钮,在它的OnClick事件处理函数中使用TOpenDialog控件加载SQL Script文件,并且把Script的内容显示在TMemo之中:

procedure TForm1.bbtnLoadScriptClick(Sender: TObject);

begin

  if (odlgScript.Execute) then

    mmScript.Lines.LoadFromFile(odlgScript.FileName);

end;

接着双击【运行Script】按钮,在它的OnClick事件处理函数中撰写如下的程序代码:

procedure TForm1.bbtnRunScriptClick(Sender: TObject);

const

  sTAG = ';';

var

  sScript : String;

  sSQL : String;

  iPos : Integer;

begin

  sScript := Trim(mmScript.Lines.Text);

  while True do

  begin

    iPos := Pos(sTAG, sScript);

    if (iPos > 0) then

    begin

      sSQL := Copy(sScript, 1, iPos - 1);

      RunScript(sSQL);

      Delete(sScript, 1, iPos);

    end;

    if (Length(sScript) = 0) then

      break;

  end;

  dmRunScript.scdsMyEssays.Active := True;

end;

 

procedure TForm1.RunScript(const sSQL: String);

begin

{

  dmRunScript.sdsScript.CommandText := sSQL;

  dmRunScript.sdsScript.ExecSQL(True);

}

  dmRunScript.sqlqScript.SQL.Text := sSQL;

  dmRunScript.sqlqScript.ExecSQL(True);

end;

上面的程序代码首先从TMemo中取得SQL Script,然后使用PosSQL Script中一一地取得每一个SQL语句,再调用RunScript来执行这个SQL语句。在RunScript方法中,可以使用TSQLDataSet或是TSQLQuery控件来执行传入的SQL语句。请注意,在RunScript方法中调用TSQLDataSet或是TSQLQuery控件的ExecSQL方法时,传入了True作为参数。这代表我们要TSQLDataSet或是TSQLQuery控件直接执行SQL语句而不要先准备SQL语句再执行,因为对于SQL Script的应用来说,通常在SQL Script中的SQL语句只会执行一次,因此不需要先行准备SQL语句,这样可以增加效率。

当所有的SQL Script执行完毕之后,再调用数据模块中TSimpleDataSetRefresh方法重新从MyEssays数据表中取得所有的数据,以显示在主窗体的TDBGrid之中。

步骤执行范例应用程序

现在可以编译和执行这个范例应用程序了,图2-37显示了范例应用程序加载一个SQL Script文件,动态建立MyEssays数据表,再新增数笔数据,最后建立主键值和索引对象。图2-38使用数据库管理工具也证明了这个范例应用程序果然成功地在数据库中建立了各种数据库对象。

2-37  执行范例应用程序的画面

本节讨论了如何使用TSQLDataSet以及TSQLQuery控件的方法。虽然这两个控件都无法让用户变更它们存取的数据,但它们可以搭配TSimpleDataSet控件让开发人员一起开发数据库应用程序。对于一些执行DDL的应用或是新增、更新和删除大量数据的情形时,使用TSQLDataSetTSQLQuery控件比使用TSimpleDataSet来得适当的。在应用系统有这种需求时,开发人员便可以使用这两个控件来帮助TSimpleDataSet控件不足的地方。

2-38  范例应用程序建立了数据表以及索引对象

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论