Delphi数据库处理(二)

第七节 TADOStoredProc对象

当应用程序必须使用数据库中的存储过程的时候,也可以使用ADOStoredProc 控件。
一个存储过程是一组语句,提前建立好保存在数据库服务器上,可以反复被执行,在服务器上完成和数据库有关的任务,并将结果传给用户。
许多存储过程在运行时还需要一系列的参数,可以通过Parameters属性来设置,这个数据集和其它的ADO 数据集相似,可完成类似的任务。

主要属性:

Active 设为true时激活数据集;
Connection 如果应用程序添加了ADOConnection,可以在这里连接;
ConnectionString 如果没有Connection属性,可以在这里做连接字符串;
DataSource   设置另一个数据源,一般不要设置,事实上如果这样做Delphi会报错;
Filter     设置筛选纪录的条件;
Filtered   决定是否激活Filter中设置的筛选条件;
Parameters 设置存储过程中使用参数的属性;
ProcedureName   设置数据集使用存储过程的名字,可以用下拉菜单选择。

主要方法

DeleteRecords 删除一条或多条纪录
Edit 设置数据集为编辑状态
EnableCountrols 使数据绑定控件显示数据
DisableCountrols 使数据绑定控件不显示数据
First 指针指向第一条纪录
Last   指针指向最后一条纪录
Prior 指针指向上一条纪录
Next   指针指向下一条纪录
MoveBy(n) 指针指向前或后的第n 条纪录
GetFieldData 把一个字段的当前值提取到缓存中去
IsEmpty 判断一个数据集是否为空
Open 打开一个数据集
Refresh 重新从数据库中提取数据更新数据集
ADOStoredProc的主要的事件与ADOQuery基本相同,可以参考使用。

第八节 主从结构的数据库应用程序
主从结构的数据库应用程序,是属于数据库的高级应用技术,下面我们通过一个实例来说明建立这种数据库应用程序的方法。

1)建立主从结构

加入 ADOTabl1:
属性
Connectionstring=连接字符串
Tablename=表名
Active=true 激活

加入 Datasource1
属性
DataSet=ADOTable1

连接上主表,做上有关的绑定控件

下面做从表

加入 ADOTabl2:
属性
Connectionstring=连接字符串
Tablename=表名
Active=true 激活

下面是做主从表的关键(在ADOTabl2中)
MasterSource=DataSource1
MasterFields=连接字段
(点..出现对话框,选中两个表的连接字段,Add 加入,Ok)
这就完成了主从表的连接

加入 Datasource2
属性
DataSet=ADOTable2

连接绑定控件

观察主从表的工作情况,这个方法几乎对所有的Delphi数据库控件都是适用的。

第九节 BDE 的应用

BDE 是Borland开发的最成熟的数据控制对象集,它对于像Oracle这些第三方数据库,由于是直接由开发商提供了驱动程序,所以执行效率比较高,到现在仍然受到不少程序员的欢迎。
它里面主要是table和Query两个数据源控件。从性能和使用方法都和ADOtable和ADOQuery 相似的(Recordset属性和方法除外,这是ADO 特有的)值得注意的是,它们连接数据源的方式采用了别名,也就是应用的时候事先一定要设计好ODBC数据源,并给定数据源一个别名。
属性
DatabaseName=别名
在table中,TableName=表名
在Query中,SQL=SQL命令
然后
Active=true
就连接上了。
ODBC数据源的别名,实际上是写入计算机的注册表的,所以如果希望通过程序来设置别名,可以通过程序直接改写注册表来解决,具体请看实例。

一、Ttable组件

该组件用来表示数据库的一个基表,它的主要属性如下:

DatabasName:数据源的名字
TableName: 表的名字
Active:     true表示活动

Filter: 数据筛选
Filtered: 控制Filter的使用,False则筛选不起作用。
FilterOptions:其中包括两个选项
foCaseInsensitive 决定是否严格按照Filter条件中大小写匹配查询,true为大小写匹配。
foNoPartialCompare
“*”是否作为数字统配符存在,true 则视为单个字符,false则视为统配符。
IndexFieldNames 设置那些字段进行记录的排序,逗号间隔,这些字段必须是关键字端。
IndexName 设置基表的第二个索引字段,如果这个属性是空的,则基表按默认索引排序。
MasterSource 在主从表关系中,设置从表关联的主表对应数据源。
MasterFields

别名和表名调用的实例:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;

type
TForm1 = class(TForm)
Database1: TDatabase;
Session1: TSession;
Table1: TTable;
Button1: TButton;
ComboBox1: TComboBox;
ListBox1: TListBox;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
DBNames: TStrings;
begin
DBNames := TStringList.Create;
//Session1.GetDatabaseNames(DBNames);
Session1.GetdatabaseNames(DBNames);
for I := 0 to DBNames.Count - 1 do
ComboBox1.Items.Add(DBNames[I]);

Database1.GetTableNames(ListBox1.Items, False);
end;

{ADOConnection1.GetTableNames(ListBox2.Items, False);
Database1.GetTableNames(ListBox1.Items, False);}

procedure TForm1.Button2Click(Sender: TObject);
begin
Database1.Close;
Database1.AliasName:= ComboBox1.Text;
Database1.Open;
ListBox1.Clear;
Database1.GetTableNames(ListBox1.Items, False);
end;

end.

第十节 开发InterBase应用程序
InterBase数据库是Borland公司开发的数据库产品,在Borland产品得到广泛的应用。该数据库是Delphi和Kylix(被称作Linux下的Delphi)开发的跨平台应用程序可用的数据库之一(其它还有Qracle、MySQL、DB2)。InterBase 有与Delphi结合紧密的特点,而且,在Delphi安装盘中。还提供了InterBase 数据服务和客户端软件,可以方便的构筑InterBase数据库的开发环境。
InterBase 的组件都放在InterBase面板中,从使用方法上来说,和上面介绍的BDE 或者ADO 相似,可以自己查阅有关资料。
这里就不再讨论了。

第十一节 dbExpress数据库控制
dbExpress 是Delphi 6.0 新加的功能,dbExpress是一个跨平台的、不依赖于数据库的一个独立的层。它提供了一些方法用于动态SQL的处理。它定义了一个接口用于访问不同的SQL 服务器,并为各种数据库提供了驱动程序。
这些驱动程序在Windows和Linux下都能使用(Windows下为动态连接库.DLL,而在Linux下为共享对象.so文件)。 这种API 驱动,减少了数据库引擎需要的额外开销。
标准的dbExpress数据库应用是不使用数据缓存的,由于保持核心运行时数据库访问层的简单和轻便。所以,dbExpress提供了高性能的数据库连接,运行速度很高。但是,不用数据缓存将无法修改数据,而且,指针的移动也是单向的。为了能够修改数据,dbExpress也提供了一种使用数据缓存的控件,当然这无疑也会影响到效率。
目前在dbExpress能够应用的数据库有Qracle、MySQL、DB2和InterBase,这里以InterBase 数据库为例。

一、单向的数据连接
实例数据库为Delphi提供的Employee.gdb。

1)加入 TSQLConnection
属性:
LoginPrompt=False   不用用户名和密码显示
DirverName=InterBase    驱动程序名
ConnectionName=IBLoca   默认数据库(Database.gdb)
Params 点对话框出现信息表,修改数据库的名字Employee.gdb
Connected=true 如果连接正确,将可以顺利的为true;

2)加入 TSQLDataset
属性:
SQLConnection=SQLConnection名字
CommandType=ctTable     用表名连接
CommandText=表名
Active=true     如果正确,将可以为true;

3)加入 TDataSource
属性:
DataSet=SQLDataSet名字

4)加入数据绑定控件,由于不用缓存,所以不能用DBGrid,这里只用简单的DBEdit。
注意属性:
DataSource=DataSource名字
DataField=字段名

5)注意,SQLDataset移动指针只有两个方法

SQLdataset1.Next;
SQLdataset1.First;

这就可以运行了。

二、可以修改的数据连接

做一个主从结构的数据显示,要求从表是可以修改的,而且要用DBGrid,所以,这里要用一个新的控件来联系:

TSQLClientDataSet

和TSQLDataset不同TSQLClientDataSet是使用数据缓冲区的,所以,用它连接数据源可以修改,也可以用DBGrid显示。
和上面方法相同,加入TSQLConnection作数剧源。
属性:
LoginPrompt=False   不用用户名和密码显示
DirverName=InterBase    驱动程序名
ConnectionName=IBLoca   默认数据库(Database.gdb)
Params 点对话框出现信息表,改数据库名:Employee.gdb
Connected=true 如果连接正确,将可以顺利的为true;

1)做主表

加入 TSQLDataset
属性:
SQLConnection=SQLConnection1
CommandType=ctTable     用表名连接
CommandText=PROJECT     (这是在Employee.gdb内的一个表)
Active=true     如果正确,将可以为true;

加入 TDataSource
属性:
DataSet=SQLDataSet1

加入数据绑定控件两个DBEdit,显示字段分别为PROJ_ID和PROJ_NAME。
用同样的方法作两个指针移动的Button。

2)做从表

加入TSQLClientDataSet
属性:
SQLConnection=SQLConnection1
CommandType=ctTable     用表名连接
CommandText=PROJ_DEPT_BUDGET (这是在Employee.gdb内的另一个表)
Active=true   (激活)
做主从连接
MasterSource=DataSource1
MasterFierds=PROJ_ID    (连接字段)

加入 TDataSource
属性:
Name=DataSource2
DataSet=SQLClientDataSet1

加入DBGrid,与DataSource2连接。

这就完成了一个主从表制作,试验一下,可以发现从表是可以修改的。
仔细研究一下这个过程,归纳出设计的一般方法。一般来说,dbExpress主要在网络中使用,特别是后面将要提到的WebSnap 快速网络开发方法,将会给dbExpress 以很大的施展空间。