数据库访问技术roshyhlc.docx
- 文档编号:7164937
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:24
- 大小:88.05KB
数据库访问技术roshyhlc.docx
《数据库访问技术roshyhlc.docx》由会员分享,可在线阅读,更多相关《数据库访问技术roshyhlc.docx(24页珍藏版)》请在冰豆网上搜索。
数据库访问技术roshyhlc
{*
ADO的来历:
UDA(universalDataAccess)是Micosoft推出的对数据库操作的一个策略,它提供了快速访问各种数据库的能力.UDA通过易用的API接口访问各种数据源(需要与其兼容的驱动程序),类似Delphi的BDE,这项技术能在一个程序中从多种数据源中轻易的访问到数据.UDA用MicrosofDataAccessComponents(MDAC)来实现,二MDAC则包括ActiveDataObject(ADO),OpenDatabaseConnectivity(ODBC)与OLEDB.ADO是MDAC的应用程序设计接口;OLEDB则是系统级的接口,它定义了一套COM接口,提供了对关联数据库及文件系统的数据访问能力,ODBC为了向后兼容也包含在MDAC中,ODBC将会被OLEDB代替,因此就目前来说,对于可以直接通过OLEDB操作的数据库就不要再使用ODBC了.对于读者来说只需要知道ADO是Microsoft提供的访问各种数据格式的高级接口,可以使用这种接口访问的数据库就行了.基于ADO的程序使用MicrosoftADO2.1或更高版本和OLEDBProvider执行数据库连接访问和更新存储.ADO2.1或更高版本需要安装在客户端上.ADO和OLEDB由Microsoft公司安装在Windows中提供.OLEDB可以连接到数据仓库并对数据进行管理.除了数据连接外,ADO连接控件还封装了事物处理能力.
一旦应用程序与数据库建立了一条合法的连接,ADO数据集控件就可以访问数据库中的数据.其实这些控件是通过数据存储访问数据的.它们从ADO数据存储中检索,修改数据,并将其显示在应用程序界面上供用户使用.
*}
BDE控件与数据库的连接必须通过ODBC来连接,还可以为数据库取别名.
BDE提供的驱动程序多用来访问本地数据库,也可以结合ODBC接口同时访问本地数据库和远程数据库.
1.ADO是Microsoft提供的访问各种数据格式的高级接口,可以使用这种接口访问的数据库成为OLEDB数据
库.OLEDB数据库可以使用前端应用程序通过ADO技术访问各种类型的数据库,包括关系型或非关系型数据库等.
Delphi数据库应用系统基本结构示意图
ADO本身是一些数据对象,使用这些数据对象,应用程序可以访问OLEDB数据库.
ADO组件页地组件功能简要说明
ADOConnection建立和OLEDB的连接,可以供ADO数据集和命令组件共享.
ADOCommand主要用于执行命令,即不需要返回结果的SQL语句.也可以与一个数据集组件一起使用,以从表中检索数据.可以通过ADOConnection连接到数据库也可以直接连接到数据库.
ADODataset用于检索和操作数据,可以从单个或多个表中检索数据.同样可以以两种方式连接到数据库.
ADOTable用于检索和操作由单一数据表产生的数据集.同样可以以两种方式连接到数据库.
ADOQuery用于检索和操作由合法的SQL语句.也可以执行一条SQL命令,可以以两种方式连接到数据库.
ADOStoredProc用于执行存储过程,存储过程可以是检索数据,也可以是执行SQL命令.可以以两种方式连接到数据库.
RDSConnection用于指定基于ADODataset的关系数据系统(RDS)连接,这种连接不支持独占连接方式.
数据访问组件:
这些组件可以访问数据库中的数据,并把数据传给数据控制组件,使得这些数据能在指定的数据组件上进行操作.因此数据访问组件是连接数据库和数据控制组件的桥梁.
DataSource可以作为数据控制组件DBGrid,DBEdit的数据传送通道.该组件不可见,本身并不能显示数据.
ClientDataSet----
在Delphi中有10类标准的数据集控件,它们分别是:
TNestedTable,TTable,TQuery,TStoredProc,TclientDataset,TADODataSet,TADOQuery,TADOtable,tadostoredproc,和Tadoconnection.这些数据集控件都是从TDataset派生来的,它们按照用途可以分为三类:
●第一类是用于BDE架构的数据集控件,包括TNestedTable,TTable,TQuery,TStoredProc,以及用于数据库决策的TDecisionquery控件.
●第二类是ADO架构的数据集控件包括TADODataSet,TADOTable,TADOQuery和TADOStoredProc.
●第三类是平面文件架构的客户端数据集控件,包括TClientDataSet.数据集控件之间的继承关系如图所示.
TDataSet类是所有在应用程序中使用的数据集对象的基类,它定义了一些数据字段,属性和方法,淡是它的大部分属性和方法是虚拟的和抽象的,它是一个抽象类在程序中不能创建它的实例,但是可以创建它的派生类如TTable,TQuery等.或者是创建它的一个派生类,然后定义它的抽象属性或方法.
●数据集的属性:
1.State状态属性表示数据库表的当前是编辑模式还是添加模式,或者是否处于活动状态.
当一个应用程序打开一个数据集的时候State属性被设置为dsBrowse,即数据集处于浏览状态.
State值有如下:
dsInactive关闭状态
dsBrowse浏览状态
dsEdit编辑状态
dsFilter过滤状态
dsOpening正在打开状态
dsInternalCalc内部计算状态
等.
2.Bookmark书签属性
3.过滤属性
●1.数据集的操作
1.打开和关闭数据集:
打开的两种方法:
(1)只需把Active属性设置为True即可.例如:
Mytable.active:
=true;
(2)另外也可以调用数据集的Open方法来打开数据集,例如:
MyQuery.open;
注意:
在结束对数据集的操作以后,或者是在改变数据集的其他一些属性(如修改TTable的TableName)之前,需要关闭数据集.
对应关闭数据集的两种方法:
(1)将数据集的Active属性设置为False,例如:
Mytable.active:
=false;
(2)调用数据集的Close方法,例如:
Mytable.close;
●2.浏览数据
每个活动的数据集都有一个指向当前记录的指针.在数据库应用程序中,如果要对记录执行某些操作,就必须将这个记录设为当前记录,这时必须把当前记录的位置改变到要执行操作的记录位置上,即浏览记录.
数据集提供的浏览数据的方法或属性如下:
First方法:
使第一条记录成为当前记录
Last方法:
最后一条
Next:
下一条
Prior方法:
前一条
Moveby方法:
使距离当前记录若干行的记录成为当前记录.
Bof属性(只读)如果这个属性返回Ture,表示已到了数据即的开始位置
Eof属性末尾
例如:
mytable.first
Mytable.last
Mytable.next
Mytable.prior
Mytable.moveby(8);
Whilenotmytable..eofdo
Begin
----
End;
●3.编辑数据集
要编辑数据集记录,首先要调用Edit方法进入编辑状态,此时数据集的State属性值将为dsedit.注意此时canModify的属性要为true,一旦数据集进入了编辑状态,用户就可以利用数据控件来修改当前的记录的值.
●4.插入数据集
首先要调用insert或Append方法进入插入状态,此时state属性值为dsinsert当然前提也是要canmodify属性为ture;
5.删除记录
调用delete方法
6.修改记录
可以用TDBGrid和TDBNavigator等控件.也可以调用方法:
AppendRecord方法:
InsertRecord方法:
SetFields方法:
7.查询特定记录
(1)Locate方法:
用于在数据集中定位一条特定的记录,并使该记录成为当前记录.语法:
Functionlocation(constkeyfields:
string;constkeyvalues:
variant;options:
tlocateoptions):
Boolean;virtual)
●数据集的事件
TDataSet的事件主要分为三大类:
Before系列,After系列和On系列
ADO数据库连接
●连接控制
两种方法:
(1)ADOConnection控件建立ADO连接,其他数据集控件和命令组件共享这个连接.
(2)为每一个ADO数据集控件和命令组件建立与数据库的连接.
在由多个数据控件时使用第一种方法较好,而且易对连接控制.
使用TADOConnection控件建立ADO连接的方法:
设置ConnectionString属性字符串.
使用已有的数据连接文件,数据连接文件其实就是存放着连接字符串扩展名为.udl的文件;
●ADO连接的常用属性和使用方法
有时可以将TADOConnection控件的ConnectionObject属性直接指向一个已有的ADO连接,用来代替自建连接.不过,这要求用户对ADO与ADO连接非常熟悉,所以一般不推荐使用这种方法.
激活TADOconnection控件的方法
(1)把Connected属性设置为True或者调用Open方法将激活一个TADOConnection控件如下所示:
ProcedureOpen(constuserid:
wideString,constpassword:
wideString);overload;
其中参数UserID和Password分别为登录数据库时的用户名和密码.在这里也可以不传递这两个参数,程序会在连接字符串中读取.
但是如果想要通过Open方法传递用户名和密码自动登陆时,要先确认TADOConnection控件的loginPrompt属性值设置为Fasle;否则程序将不理睬传递的用户名和密码,而仍然弹出登陆对话框.
此外,如果TADOConnection有与之相连的ADO数据集控件和命令控件,当数据集控件被激活时或者命令控件中的命令被执行时,TADOConnection控件也将被激活此时,将首先触发OnWillConnect事件和OnconnectCompleted事件.用户可以编写这两个事件的处理程序代码,来完成特定的功能!
(2)
关闭的方法:
反过来,把Connected属性设置为Fasle或者调用Close方法将关闭一个TADOConnection控件.此时,将首先触发OnDisconnect事件,接着关闭TADOConnection控件,最后关闭与之相连的ADO数据集控件和命令组件.
程序运行时,可以通过访问TADOConnection控件的State属性判别控件的状态.;
State有以下状态:
stClosed关闭状态stOpen打开状态stconnecting时,表示正在建立连接字符串设置的连接,此时可以用cancel方法取消连接.
其他属性见下图:
数据库操作
一数据库组件
BDE控件与数据库的连接必须通过ODBC来连接,还可以为数据库取别名.
BDE提供的驱动程序多用来访问本地数据库,也可以结合ODBC接口同时访问本地数据库和远程数据库.
1.BDE组件:
当用BDE组件访问数据库时要通过数据访问组件中的DataSource组件与BDE数据组件连接起来才能供数据控制组件使用.
BDE的数据集组件:
Table,Query,StoredProc,Database,Session,BathchMove,UpdateSQL,NestedTable,BDEClientDataSet
在绝大多数数据库应用程序中,一般都是使用数据集组件Table,Query,或StoredProc与磁盘上的数据库进行连接,用DataSource组件连接数据控制组件和数据集组件.
Table,Query和StoreProc组件中都包含一个不可见的Fileds,Fields时一个串列表,它对应于数据库表或一个查询结果的列表字段.Fields对象时伴随Table,Query和StoreProc的活动状态动态建立的,当数据表被关闭时,Fields对象也随之小时,该对象在程序设计和程序运行过程中都是不可见的.
这些组件中,Table,Query和StoreProc同属于数据集组件,起到联系应用程序和数据库的作用,Table和Qurey有许多类似点.
Table组件的属性
DatabaseName
tablename
Active
2.Query组件
属性:
Active属性
SQL属性
在Query组件中,SQL查询语句使用Open方法执行,而其他类型的SQL语句则需要用ExecSQL方法执行.
3.StoredProc组件
由于存储过程位于数据库服务器上,所以它的执行效率比较高,从而可以改善程序性能.
StoreProc组件时TDataSet派生来的.它适合于执行那些不需要返回数据,并且通过输出参数来返回信息的存储过程.StoredProc组件的Params属性用于管理这些参数.
属性:
Params属性:
用来保存存储过程中执行输入和输出的参数.它的值是一个参数值的数组.
StoreProcName属性:
设置存储过程名!
主要方法:
CopyParams复制一个存储过程中的参数到另一个参数列表中.
Destry撤销一个存储过程.
UnPrepare释放在先前准备操作时分配给存储过程的资源.
Create初始化一个已声明的存储过程.
ExecProc执行服务器上的存储过程.
数据访问组件
1.DataSource
主要属性:
Dataset属性:
指定数据集控件(Table,Query等)的名字.可以在程序中动态的改变.
Enable属性:
指定DataSource和数据集组件之间的连接是否可用.
AutoEdit属性:
布尔变量,说明将DataSource组件连接的数据集组件自动设置成编辑状态.如果其值为False,用户将不能改变记录中的数据,如果想修改数据必须调用数据集组件的Edit方法来完成对当前数据的编辑.
事件:
OnDataChange:
当于DataSource组件相连接的数据集的记录指针的位置发生变化时将触发该事件.
OnUpdataData
OnStateChang:
当与DataSource组件相连的数据集组件的状态发生改变时,触发该事件.
主要方法:
Create方法:
调用Create方法在运行时建立一个DataSource组件.在设计阶段向数据模块中添加一个数据源组件时,Delphi会自动插入一个对Create方法的调用.
Edit方法:
:
调用Edit方法允许用户对与该数据源组件相连的数据集进行编辑修改.
Edit方法首先检查AutoEdit的属性值是否为True,State属性表示数据集组件是否处于dsBrowse状态.然后再调用数据集的Edit方法.调用数据集的Edit方法检查这些属性值的目的时为了保证数据集组件处于支持编辑的状态,而数据源组件页同样支持编辑.
数据控制组件
DBGrid组件:
重要属性
Columens:
用来读取和设置网格中列的特性.它可以在设计时用ColumnsEditor对话框设置.也可以在应用程序运行时动态的设置.在设计时如果已经建立了Grid组件与数据集的联系并且数据集处于打开状态,就可以显示数据.
DataSource属性:
最重要的属性用来指定数据源的来源.
ReadOnly:
标志是否只读.
SelectedField属性:
说明了当前选择的单元格字段.
重要事件:
OnDrawColumnCell当程序绘制一个单元格时触发.
DBNavigator组件:
一般与其他的数据控制组件(DBGrid或DBEdit)一起使用,它提供给给用户在编辑或浏览数据时对数据集的控制.
属性:
DataSource
ShowHint与Hints属性用来决定是否显示和显示组件中各按钮的提示信息.
其他数据控制组件:
DBText,DBEdit,
主要数据属性
DataSource与DataFiled
DBMemo,
主要属性:
DataSource与DataFiled
Text属性:
主要用来显示大二进制类型的文本对象(BLOB).
AutoDisplay属性:
用来决定是否自动显示一个数据集中备注类型的字段值.当Autodisplay属性为True时,DBmemo组件在当前记录的改变自动显示该字段的新内容;如果设置为False则只会显示字段名
基于ADO的技术:
大部分ADO组件都有类似与BDE的连接和数据集组件.如:
1.ADOConnection与Database组件类似,
ADOtable与Table,ADOQuery与Query,以及ADOStoredProc与StoredProc之间也都具有这种类似关系.注意:
Delphi中没有专门的ADO数据源组件!
ADOConnection组件相当于ODBC的别名.
属性:
Mode属性
State属性:
ConnectionTimeout属性.
ConnectionString属性
LoginPrompt:
该属性决定是否弹出密码输入框.默认是Ture,实际中长设置为False.
ADOConnection组件主要方法:
Open建立到数据源的物理连接,连接完成后可以对它发出命令并处理结果.
Close
Execute
BeginTrans
CommitTrans
RollbackTrans
Cancel
2.ADOCommand组件
属性:
Connection属性:
设置或返回ADOCommand组件当前所属得ADOConnection组件.
Commandtext
CommandType属性:
指示如何计算CommandTEXT属性值,即命令的类型.
CommandTimeout属性:
Prepared属性:
指示执行前是否保存命令的编译版本,并设置或返回布尔型值.
它的主要属性是Execute方法,用于执行在CommandText属性中指定的查询,SQL语句和存储过程.
3.ADODataSet组件
它表示的是来自基本表或命令执行结果的记录全集;
主要属性:
Connection属性:
设置或返回ADODataSet组件当前所属的ADOConnection组件.
Bof属性:
Eof属性
方法:
Cancel:
取消上一步所作的修改
updateBatch将所有本地缓存中的更改写入数据.
CancelUpdates取消在调用Update方法前对当前记录所作的任何更改.
Moveby移动ADODataSet组件中当前记录的位置
First
Last
Next
Prior
Requery
SaveToFile将查询结果保存在文件中.
4.ADOTable组件
方法和属性类似BDE的Table在此不作介绍
如果ADOtablel是使用ADOConnection组件建立连接的,那么可以调用ADOConnection组件的GetTableNames方法将该连接能访问的数据表名全部返回,再将要访问的数据表名赋给TableNames属性,这是ADO编程中常用的方法.
例如:
ProcedureTform1.GetName;
Begin
ADOConnection1.GetTableNames(listBox1.items,false)
End;
Proceduretform1.button1click(sender:
tobject);
Begin
Withadotable1dobegin
Close;
Tablename:
=(senderastlistbox).items[(senderastlistbox).items];
Open;
End;
End;
5.ADOQuery组件
ADOquery与ADOTable,ADODataset组件同属ADO的数据集组件,不过它允许动态的运行SQL语句返回结果,并且可以执行所有的SQL语句.
与Query组件一样,ADOQuery组件也使用SQL语句在一个或多个数据表中任意选择字段,而SQL语句除了可以查询数据外,也可以用来添加或删除数据.在使用过程中,Delphi应用程序不会解析SQL命令.它只是将命令传给后台数据库,有数据库负责执行SQL命令,如果SQL语句生成结果数据.则会将从后台数据库返回到应用程序的ADOQuery组件.
SQL语句可以在运行是设定,SQL语句中可以设置参数,标识参数的方法是在参数前加上冒号,比如下面的语句:
Select*fromcutomerwherename=:
name;
当每次在SQL命令中添加一个参数是,就会在控件的Parameters属性中自动添加一个参数.可以在对象观察器中单击Parameters属性框旁变的按钮打开属性编辑框,以为每个参数赋值.
在运行是给参数赋值有两种方法:
一种方法是以Parameters组件的形式向参数赋值,代码为:
ADOQuery1.parameters[0].value:
=’house’;
两外一种方法是使用ParamByName方法,代码如下:
ADOQuery1.Parameters.ParamByName(‘name’).Asstring:
=’House’;
在程序中为参数赋值时,Query组件有一点不同,其赋值语句为:
Query1.ParamByName(‘name’).value:
=’house’;
或者是:
Query1.params[0].value:
=’house’;
6.ADOStoreProc组件
它执行存储过程的方法有两种:
如果存储过程返回结果,就调用Open方法;如果不返回就调用ExecProc方法.
Delphi中的SQL编程
1.Query组件在编程中的应用:
在Delphi应用程序中,编写SQL语句有两种方式:
静态方式和动态方式.在动态方式下程序灵活性更高,因为SQL语句中包含有一些参数变量,因而,在程序运行过程中,可以对这些参数变量赋予不同的值,从而实现不同的SQL查询等.同时它还可以动态更改Query组件的SQL属性,具体方法是首先调用Query组件的Close方法,关闭当前的Query组件.然后调用Clear方法清除SQL属性,说明新的SQL命令文本.最后调用Add方法,将新的SQL命令文本加入到SQL属性中.
Begin
Try
ADOQuery1.Close;
ADOQuery1.SQL.Cear;
Query1.SQL.Add(memo1.Text);
Query1.Open;
Except
Onedatabaseerrordoquery1.execsql
End;
End;
2.动态SQL语言编程
要使用参数化查询,必须在SQL语句中加入参数,例如:
InsertintoCountry(name,capital,population)
Values(:
name,;capital,:
population)其中,第一行的Name,C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 访问 技术 roshyhlc
![提示](https://static.bdocx.com/images/bang_tan.gif)