第十七章 SQL编程(二)
SQL编程实例
我们在学习了SQL程序的编写方法之后我们便可以着手创建自己的应用程序了通过创建应用程序我们对Delphi的强大功能就会有更深刻的印象同时会进一步全面掌握有关SQL编程的知识在本节中我们主要介绍两个例子前一个例子主要是用静态的SQL语句编程后一个例子是用动态SQL语句编程
设计简单的SQL程序编辑器
例:在这个例子中我们设计一个交互式的SQL程序编辑器在这个编辑器中我们可以根据SQL语言的语法规则编写常用的SQL命令并通过单击编辑器中的有关的按钮直接执行编写好的SQL命令SQL命令的执行结果也会及时地通过一个TDBGrid 部件显示出来
表 SQL编辑器中个主要部件的属性
━━━━━━━━━━━━━━━━━━━━
部 件 属 性 值
────────────────────
Form Caption=SQL程序编辑器
DBGrid DataSource=DataSource
Button Caption=执行(&E)
Button Caption=清除(&C)
Button Caption=退出(&X)
Button kind=bkClose
Memo
DataSource DataSet=Query
Query DatabaseName=DEMOS
━━━━━━━━━━━━━━━━━━━━
因为我们在设置Query的DatabaseName属性时将其设置为DEMOS所以我们设计的这个SQL程序编辑器只能对DEOMS中的数据库表进行操作
单击按钮Button的事件处理过程代码为
程序清单
procedure TFormButtonClick(Sender:TObject)
begin
Queryclose;
QuerySQLclear;
QuerySQLAdd(Memotext)
QueryOpen;
end;
单击按钮Button的事件处理过程为
程序清单
procedure TFormButtonClick(Sender:TObject)
begin
Queryclose;
QuerySQLclear;
QueryExceSQL;
end;
下面我们对程序清单和程序清单中的程序代码进行简要的分析
程序清单中的程序代码是用来执行查询的
Queryclose;
这一行程序是用来关闭Query的我们在前面的章节中介绍过只有在调用close 方法将TQuery部件关闭之后才能修改其SQL属性值执行close命令关闭查询是很安全的如果查询已经被关闭了调用该方法不会产生任何影响
QuerySQLclear;
因为TQuery部件的SQL属性只能包含一条SQL语句调用Clear 方法的目的是为了清除SQL属性原来的属性值即原来的SQL命令语句如果不调用clear方法清除原来的SQL命令语句当在后面的程序中调用Add方法为SQL属性设置新的SQL命令语句时Delphi 会将新的SQL命令语句加在原来的SQL命令语句这样使得SQL属性中包含两条独立的SQL语句这是不允许的
QuerySQLAdd(Memotext)
该条命令是将SQL编辑器的编辑区内的内容(TMemo部件Memo)设置成Query的SQL属性值
Queryopen;
该语句用来执行Query中的SQL命令语句如果执行查询从数据库中获得查询结果查询结果会在数据网格DBGrid中显示出来
程序清单是用来清除查询的其前两行语句跟程序清单中的代码是一样的QueryExecSQL有一些特别调用ExecSQL方法也是打开QueryExecSQL方法与open方法不一样的请参看前面的章节当Query中SQL属性值为空时即没有SQL语句时只能调用ExecSQL方法来打开Query如果调用 open 方法会返回一个错误 在执行完 QueryExecSQL语句之后应用程序将会清除数据网格DBGrid中的所有内容
设计一个数据库查询器
例:在数据库查询器中用户可以选择要查询的数据库查询数据库中的那一个表根据数据库表中那一个字段进行查询并且可以方便地指定查询条件指定查询条件主要包括指定逻辑运算符(=><<=>=likeinNOT likeNOT in)和字段值
例子全部的程序清单如下
unit main;
interface
uses
SysUtils Windows Messages Classes Graphics Controls
Forms Dialogs StdCtrls DB DBTables Buttons ComCtrls Tabnotbk;
type
TQueryForm = class(TForm)
BitBtn: TBitBtn;
DataSource: TDataSource;
Table: TTable;
GroupBox: TGroupBox;
CheckBox: TCheckBox;
CheckBox: TCheckBox;
PageControl: TPageControl;
[] [] [] []