Delphi数据库处理组件.docx
- 文档编号:7288744
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:27
- 大小:32.51KB
Delphi数据库处理组件.docx
《Delphi数据库处理组件.docx》由会员分享,可在线阅读,更多相关《Delphi数据库处理组件.docx(27页珍藏版)》请在冰豆网上搜索。
Delphi数据库处理组件
Delphi数据库处理组件
BDE、ADO、InterBase和dbExpress详细说明
第一节BDE、ADO、InterBase和dbExpress
Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi6.0开始还加入了一种dbExpress方法。
另外,Delphi还提供了专门处理Borland公司自己的数据库产品InterBase数据库的专门的方法。
BDE(BorlandDatabasEngine),是Delphi中最古老的技术,从delphi2.0加入BDE技术以后,一直是Delphi处理数据库的事实上的标准。
BDE是一个基于驱动程序的体系结构,每一种数据格式或数据源都有一种驱动程序来驱动相近的数据源。
BDE可以很好的支持现在最流行的ODBCAPI方法,ODBC是一种C/C++应用程序编程接口(API),无论是对任何一种客户/服务器关系型数据库管理系统(RDBMS),还是最流行索引顺序访问方法(ISAM)数据库(Jet、Foxpro),都能很好的访问。
同时,由于BDE的驱动程序主要直接来自于第三方开发商,所以,对于像Oracle这些非微软的数据库,执行效率上比较高。
正是这些特点,使BDE技术还是得到了很多数据库开发程序员的欢迎。
ADO技术是微软提出来的处理关系型数据库和非关系型数据库的新技术,它基于微软被称为OLEDB的数据访问模式,它是专门为了给大范围商业数据源提供访问而设计的,包括传统的关系型数据表、电子邮件系统、图形格式、Internet资源等。
ADO所需内存更少,更适合大流量和大事务量的网络计算机系统。
ADO顶层有三个对象:
Connection、Command、Recordset。
Connection用以指定数据源,建立和数据源的连接。
Command对象用以对数剧源执行指定的命令,可以接受SQL语句,表和存储过程的名称,执行SQL查询,更新数据,插入纪录等。
Recordset对象表示的是来自表或命令执行结果的记录全集,操纵来自提供者的几乎所有数据。
由于ADO技术的迅速普及,从Delphi5.0开始,加入了ADO技术的模块,并逐步成为Delphi数据库设计的主流。
但是,和VB的ADODC相比,它还是有所不同的,在数据绑定上,它更多的吸收了BDE的特点,以做到和原来的程序兼容,同时,它又可以接受标准ADO技术的各种属
性和方法,在接受这些属性和方法时,它是和数据绑定控件脱离的,当然从某种意义上来说,这种方案提高了执行效率,给设计人员以更多的选择。
dbExpress是Delphi6.0加入的最新的数据库模块,它不使用缓存,可以快速浏览大量的数据,但是,不使用缓存就不能更改,所以它的标准方式是只读的。
它一个重要的特点是交叉平台,可以和Linux数据库连接,速度相当快。
下面的讨论,将以ADO技术为主线,最后再说明BDE和dbExpress的应用方式。
Top
第二节ADO面板的主要组件
ADO面板一共有7个组件:
ADO组件
主要用途
相似BDE组件
ADOConnection
主要用于建立数据库的连接
Database
ADOdataSet
ADO提取和操作数据库的主要数据集,可以直接连接到数据库,也可以通过ADOConnection连接到数据库
ADOtable
主要用以操作和提取单个基表的数据,可以直接连接到数据库,也可以通过ADOConnection连接到数据库
Table
ADOquery
通过SQL语言提取数据,其连接数据库的方式和前两种一样
Query
ADOStoredProc
这个组件专门用于运行数据库中的存储过程
StoredProc
ADOCommand
该组件用于运行一些SQL命令,这个组件可以和支持数据集的组件一起使用,也可以直接从一个基表中提取一个数据集
RDSConnection
一个进程或一台计算机传递到另一个进程或计算机的数据集合
●ADOConnection组件用Execute方法执行命令
●ADOCommand组件调用Execute方法直接执行SQL命令
●ADOTable组件调用Open方法执行命令
●ADOQuery组件调用Open方法或ExecSQL方法执行命令
为了连接数据绑定控件,上述组件往往要和处于DataAccess中的Datasource配合使用。
Top
第三节ADOtable组件
ADOtable、ADOdataSet、ADOquery和ADOStoredProc都继承同一个父类TCustomADODataSet,所以,在属性事件和方法上有很多相似的地方,但它主要是针对数据库中的表进行操作。
ADO-〉ADOtable
属性:
Name''控件名''
ConnectionString''连接字符串''
可以通过点击右边的按钮,通过向导建立数据源。
有时候需要知道相对路径,可以用下面的方法找到程序当前的路径:
tpath:
=ExtractFilepath(Application.Exename);
文件名:
=Tpath+''..\data\Test.mdb''
表明数据库在当前程序上一层的Data文件夹下。
TableName''表名''
Activetrue
这就激活了数据源,为了和绑定控件联系,要增加一个DadaSource控件。
事实上,所有的绑定控件都是和DadaSource联系。
DataAccess-〉DadaSource
属性:
Dataset=ADOtable.Name
加入绑定控件:
DataControls-〉
DBgrid(表格)
属性
DadaSource=''DadaSource.Name''
DBNavigator(导航条)
属性
DadaSource=''DadaSource.Name''
运行一下可以看出关系
下面介绍一下ADOtable的一些重要的方法,这些方法大部分和Table是兼容的。
为了便于叙述,ADOtable控件的Name定为ADOtable1
1)移动指针
第一个:
ADotable1.First;
最后一个:
ADotable1.Last;
下一个:
ADotable1.Next;
前一个:
ADotable1.Prior;
2)从字段中取出数据
通过如下方法可以访问字段的值
●ADOtable1.FieldValues[‘字段名’]
●ADOtable1.Fields[索引值].(asString{asInteger,asFloat})
●Adotable1.fieldbyname(‘字段名’).(asString{asInteger,asFloat})
Top
在读写字段的时候,又是根据需要可以加上强制类型转换
例如:
Edit1.text:
=ADOtable1.Fields[0].AsString;
用下面的方法可以去除字段的性质:
ADOtable1.fielddefs[索引值].name;字段名
ADOtable1.fielddefs[索引值].Size;字段大小
ADOtable1.fielddefs[索引值].Datatype;字段属性
3)修改数据:
修改数据的时候,需要先建立EDIT方法,然后用Post方法才能真正的写入。
ADOtable1.edit;
ADOtable1.FieldValues['姓名']:
='王秀琴';
ADOtable1.post;
4)增加一条空纪录:
ADOtable1.append;
或者ADOtable1.Insert;
新增纪录也可以用如下方法,在新增纪录的同时输入数据
ADOtable1.appendRecord(xxx,xxx,xxx,....);
5)删除当前纪录:
ADOtable1.delete;
如果在ADOtable1的OnBeforeDelete方法中写下:
ifmessagedlg(''确实要删除吗?
'',mtinformation,[mbyes,mbno],
0)=mrnothenabort();
可以实现删除前的提示。
6)过滤
可以用如下的方法实现数据的过滤
在ADOtable1的OnFilterRecord方法中写下:
Accept:
=(条件);
或ADOtable1的filter属性进行设置
然后
ADOtable1.filtered:
=true;为实现过滤。
ADOtable1.filtered:
=false;为解除过滤。
Top
7)指针在文件的头尾
指针在最后一条记录之后ADOtable1.Eof
指针在第一条记录之前ADOtable1.Bof
如此可以实现对数据库的遍历
form1.ADOtable1.first;
whilenotADOtable1.eofdo
Begin
.......
ADOtable1.next;
End;
记录当前位置的显示
☐RecordCount记录总数
☐RecNo当前记录号
8)此外,ADOtable组件还继承了ADO中的RecordSet对象几乎全部属性和方法,简述如下:
withadoTable1.Recordsetdo
begin
//属性
PageSize一页所包含的记录数
PageCount数据的页数
AbsolutePage;当前记录所在页
AbsolutePosition;当前记录的序号位置
BOF;指针在第一个记录之前
EOF;指针在最后一个记录之后
//方法
AddNewfieldList,Values;创建新记录,其中fieldList为用数
组表示的字段名集,Values为用数组表
示的数据集。
Cancel;取消上一步所作的修改
UpdateFields,Values;保存对当前记录所作的修改
Delete;删除当前记录
Move(n);移动n条记录
MoveFirst;移动到第一条纪录
MoveLast;移动到最后一条纪录
MoveNext移动到下一条纪录
MovePrevious移动到上一条纪录
Requery;通过从新执行对象所基于的查询,以
更新RecordSet对象中的数据。
Top
end;
附录:
关于TActionList控件的使用
在Standard面板,提供了一个TActionList控件,它集中了大部分按钮的使用方法,可以简化按钮的设计。
方法:
调入TActionList,双击,可以看到一个面板,右键-〉NewStandardAction选择Dataset下的适当的控制,可以选择多个。
以后加入的开关,只要在属性Action中选择适当的项目就可以了,不需要专门编程,实例见“ActionList应用”。
使用Recordset对象来处理数据集的数据,会发现数据帮定控件的指针一般不会跟着移动,这实际上给设计者提供了另一个在后台快速处理数据的方法。
第四节ADOQuery组件
和ADOtable组件一样,ADOquery继承了同一个父类TCustomADODataSet,所以,上面说到的ADOtable属性事件和方法基本上是通用的,但它主要是针对数据库中的SQL命令进行操作。
下面主要说一下ADOquery特殊的地方。
1)SQL属性
SQL是TStrings类型的属性,包含了ADOquery组件要执行的SQL命令,是ADOquery最为重要的属性之一。
在应用程序中,需要调用Open方法或者ExecSQL方法来执行在SQL中的命令。
在设计阶段,可以利用属性编辑起来编写。
WidthADOquerydo
Begin
//重新写入时,要关闭原来的查询
Close;
withSQLdo
Begin
//因为Add是在原来的基础上加入,所以先清除原来的SQL命令
Clear;
Add(''selsct编号,姓名,奖金'')
Add(''From奖金表'')
End;
//执行SQL命令
Open;
End;
Top
查询命令也可以这样来写:
效果是一样的
s1:
=''编号'';
s2:
=''姓名'';
s3:
=''金额'';
withADOquery1do
begin
sql.Clear;
SQL.Add(''select'');
SQL.Add(s1+'',''+s2+'',''+s3);
SQL.Add(''From奖金'');
execsql;
active:
=true;
end;
如果是查询操作,使用Open,如果不需要返回结果集,则使用execsql。
添加
WithADOQuery1do
begin
Close;
SQL.Clear;
SQL.Add('InsertIntoTable1(Field1,Field2)')
SQL.Add('Values(10,20)');
ExecSQL;
end;
修改
WithADOQuery1do
begin
Close;
SQL.Clear;
SQL.Add('UpdateTable1SetField1=20,Field2=30)')
ExecSQL;
end;
删除
WithADOQuery1do
begin
Close;
SQL.Clear;
SQL.Add('DeleteFromTable1')
SQL.Add('WhereField1=20andField2=30');
ExecSQL;
end;
查询
WithADOQuery1do
begin
Close;
SQL.Clear;
SQL.Add('SelectField1,Field2FromTable1')
SQL.Add('WhereField1=20andField2=30');
Open;
end;
***************************************************
通过Delphi自有的方法属性实现:
添加:
withADOQuery1do
append;
......
post;
删除:
withADOQuery1do
delete(选择删除的记录);//默认删除记录指针指向的记录
修改:
withADOQuery1do
edit;
......
post;
adotable1.Append;//添加
ADotable1.Fields.FieldByName('gxid1').Value:
=gx;
adotable1.Post;
adotable1.delete;//删除
adotable1.edit;//修改
ADotable1.Fields.FieldByName('gxid1').Value:
=gx;
adotable1.post;
WITHIadoquerydo
begin//添加
adoquery.open;//moticesetadoquery.sql
adoquery.append;//ORadoquery.insert;
fieldbyname(fieldname).asstring:
=trim(edit1.text);
......
adoquery.post;
end;
删除:
adoquery.delete
修改:
adoquery.edit;
fieldbyname(fieldname).asstring:
=trim(edit1.text);
//查询记录
procedureTForm1.Button1Click(Sender:
TObject);
begin
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('select*fromYourTABLEwhere查询条件');
ADOQuery.Open;
//插入记录
procedureTForm1.Button2Click(Sender:
TObject);
begin
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Text:
='insertintoYourTABLE(字段1,字段2)values(:
字段1,:
字段2)';
//ADOQuery.SQL.Add('insertintoYourTABLEvalues()');
ADOQuery.Parameters.ParamByName('字段1').Value:
=trim(Edit1.Text);.
//为参数变量赋值
ADOQuery.Parameters.ParamByName('字段2').Value:
=trim(Edit2.Text);
ADOQuery.ExecSQL;
end;
//删除记录
procedureTForm1.Button3Click(Sender:
TObject);
begin
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Text:
='DeletefromYourTABLEwhere字段3=:
字段3';
//这里没有添加where的条件判断,实际使用时,注意添加判断
//ADOQuery.SQL.Add('DeletefromNEW_TABLEwhere字段3=:
字段3');
ADOQuery.Parameters.ParamByName('字段3').Value:
=trim(Edit3.Text);
ADOQuery.ExecSQL;
//删除记录也可用DeleteRecords()函数
procedureDeleteRecords(AffectRecords:
TAffectRecords=arAll);
这个函数有一个参数:
AffectRecords可以取如下的值:
1、arCurrent:
删除当前记录
2、arFiltered:
删除符合Filter过滤后的所有记录(如果你使用Filter过滤的话)
3、arAll :
删除所有记录
4、arAllChapters:
Deleteaffectsallchapters(ADOchapters)
//修改记录
procedureTForm1.Button4Click(Sender:
TObject);
begin
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Text:
='UpdateYourTABLESET字段4=:
字段4';
//这里没有添加where的条件判断,实际使用时,注意添加判断
//ADOQuery.SQL.Add('UpdateYourTABLESET字段4=:
字段4');
ADOQuery.Parameters.ParamByName('字段4').Value:
=trim(Edit4.Text);
ADOQuery.ExecSQL;
//即时更新插入、删除、修改后的记录
在上面插入、删除、修改的语句后添加如下代码即可:
ADOQuery.Close;
ADOQuery.SQL.Add('select*fromYourTABLEwhere查询条件');
ADOQuery.Open;
//使用ADOQuery时注意:
1、如果你需要更改数据,query.requestlive必须为true
2、如果有输入参数的时候,容易出错,通常的错法是这样:
比如:
“WHEREabc=:
abc”
改正如下:
“WHEREabc=:
abc”就是说=:
前后都不能留空格。
3、ADOQuery.Open与ADOQuery.ExecSQL有不同之处。
ADOQuery.Open一般用在查询,select时候;而ADOQuery.ExecSQL用在insert,delete,update等。
2)Parameters
当SQL语句中有参数时设定
动态查询的实现
⏹检索的字段或查询的条件在程序运行期间是动态变化的;
⏹用户可以处理不同检索字段或查询条件的查询结果集
实现方法
●方法一:
字符串拼接方法
withadoquery1do
begin
close;
sql.Clear;
sql.Add('select*from工会会员');
sql.Add('wherexmlike''%'+edit1.text+'%''');
open;
end;
●方法二:
为SQL语句设定参数
i.ADOQuery组件的Parameters属性
withadoquery1do
begin
close;
sql.Clear;
parameters.Clear;
sql.Add('select*from工会会员');
sql.Add('wherexm=:
xm');
parameters[0].Value:
=edit1.Text;
open;
end;
ii.ADOQuery组件的ParamByName方法
withadoquery1do
begin
close;
sql.Clear;
parameters.Clear;
sql.Add('select*from工会会员');
sql.Add('wherexm=:
xm');
parameters.ParamByName('xm').Value:
=edit1.Text;
open;
end;
iii.ADOQuery对象的ParamValues属性
withadoquery1do
begin
close;
sql.Clear;
parameters.Clear;
sql.Add('select*from工会会员');
sql.Add('wherexm=:
xmorxb=:
xb');
parameters.ParamValues['xm;xb']:
=varArrayof([edit1.Text,combobox1.Text]);
open;
end;
第五节ADOConnection和ADODataSet
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 数据库 处理 组件
![提示](https://static.bdocx.com/images/bang_tan.gif)