DBExpress 入门
——程 健
email: mailto:cjcjc@citiz
一、引言
刚才拿到一张Delphi 6的企业版,我最关心的无疑是其新增强大的Web支持和全新的数据存取技术(dbExpress)。本文就dbExpress技术做一简要讨论。
二、简介(Overview)
dbExpress是在Kylix中首先引进的一种极其快速、小巧、易发布的SQL数据库存储技术。由于它摆脱了传统的数据存取方式,完全摆脱了,BDE/IDAPI、ADO、ODBC等存取数据方式,而且是目前在Kylix中存取数据库的唯一方法,所以,它是一种真正跨平台的数据库存取技术,尤其适合开发多层(N-Tierddb2数据库sql语句)应用。
dbExpress为每一种其支持的数据库撰写具有统一接口的dbExpress驱动程序,所以,当你发
布dbExpress饮用程序时,必须同时发布此驱动程序(一个DLL文件)。目前,dbExpress支持一下数据库:InterBase、DB2、Oracle、mySQL。很可喜,我最常用的MS-SQL Server没有被支持、不过,仔细想想Microsoft数据存取技术的,这也就不难理解了。
三、单向数据集(Unidirectional Dataset)
为什么dbExpress那么快?答案是,它使用了单向数据集。它提供了一种高速、轻巧的存取数据库信息的技术,它能够向数据库服务器发送SQL指令,如果返回数据,它也能够获得访问这些数据的游标。但是,它只能处理单向、只读的游标、它不在内存中进行数据缓存,这样可以提高数据存取速度并使用最少的资源。天下没有不要钱的午餐,由于使用了这种单向技术,dbExpress相对与原来的TDataSet,有了不少限制、
四、dbExpress的限制(Limitation)
1、在数据集中导航(即在数据集中跳转)的方法只省下First和Next。大多数其它方法都会导致产生异常。其它(比如GotoBookMark)什么都不做。
2、你无法直接对数据集进行修改,CanModify属性永远是false,如果你想用什么Edit之类的
方法对其进行编辑,那都是徒劳的。你应该已经想到直接用一条UPDATE便可解决了吧?
3、数据过滤不能用了,当然,直接用SELECT的WHERE子句吧。
4、最讨厌的是Lookup Field不能用了,如果你习惯用它,那真的是很麻烦。用JOIN吧……
五、dbExpress数据存取控件
Delphi 6提供了以下四种dbExpress数据存取控件: TSQLDataSet、TSQLQuery、TSQLTable、TSQLStoredProc(图1)。
图 1 dbExpress控件
一般我们推荐用TSQLDataSet,因为它通用,即可以向数据库服务器发送命令,也可以处理任何数据。其它三个应该都可以相向了,是让用惯了TTable、TQuery、TStoredProc的用户可以比较好上手,也可以比较容易的把以前的程序迁移到dbExpress。
注1:不要以为这四个控件有什么互相从属关系,它们都是从TSQLCustomDataSet继承下来的。
六、dbExpress程序一般构架——第一个dbExpress程序
正如BDE需要TDatabase。ADO需要TADOConnection一样,dbExpress提供了TSQLConnection控件,我们在dbExpress程序中,首先需要放置TSQLConnection控件,使其连接到数据库,然后再用数据存取控件来访问数据。下面,我们就来建立我们第一个dbExpress应用程序。我们假定您安装并启动了Interbase 6服务器,并有默认的IBLOCAL别名。
1、运行Delphi6 Profasional或者Enterprise版,File->New->Application;
2、放置一个Tedit,其Text属性为select * from CUSTOMER;一个Tbutton,其Caption属性为Go;一个TlistView其ViewStyle属性为vsReport;一个TSQLConnection;一个TSQLDataSet,其SQLConnection属性为刚才放置的SQLConnection1。见图2。
图 2程序的初步设置
3、双击SQLConnection1,出现dbExpress Connection对话框,在Connection Name中选择ibLocal,确定右边的Database项中的数据库名正确,见图3。
图 3 dbExpress Connections对话框
4、双击Button1,在OnClick中输入如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j:Integer;
begin
//判断是否有SQL语句
if Edit1.Text = '' then
begin
ShowMessage('No SQL Statement!');
exit;
end;
//执行SQL语句
if SQLDataSet1.Active then
SQLConnection1.Close;
SQLDataSet1.CommandText := Edit1.Text;
SQLDataSet1.Open;
//根据返回的数据集调整TListView控件
ListView1.Items.Clear;
ListView1.Columns.Clear;
for i := 0 to SQLDataSet1.Fields.Count do
with ListView1.Columns.Add do
if i = 0 then
Caption := 'NO.'
else
Caption := SQLDataSet1.Fields[i - 1].DisplayLabel ;
j := 1;
//显示数据
SQLDataSet1.First;
while not SQLDataSet1.Eof do
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论