微软的Windows操作系统是当前应用程序的主流开发和使用平台,它提供了数种不同的数据访问存储技术,比较常见的有以下几种
ODBC
它只能通过以C/C++语言API的形式提供数据库服务。
OLE-DB
为了从各种不同的数据源中存取数据,并且能够处理非关系数据;同时为了使应用程序能够以统一的方式存取各种不同的数据源,微软推出了OLE-DB。OLE-DB定义了统一的COM接口作为存取各类数据源的标准,并且统一封装在一组COM对象之中。
ADO
由于OLE-DB太过于底层,很难被大部分程序员接受,同时为了让脚本语言也能使用OLE-DB存取各种数据源,微软又用COM技术将OLE-DB封装为ADO对象。
ADO的架构
大家可以看出ADO可以通过OLE-DB直接访问数据源,也可以通过OLE-DB转ODBC的方式来访问数据源,但除了为了兼容原有应用系统,否则我们推荐通过OLE-DB直接访问数据源的方式。
DM 数据库对外提供了标准的OLE-DB和ODBC接口,所以我们可以在开发程序时任意使用ADO的两种方式(通过ODBC和通过OLE-DB)来访问达梦数据库。
虽然现在微软又推出了新一代的ADO.NET数据访问对象,但目前还是有很多程序员在windows下进行数据库应用程序开发时使用ADO;Delphi是一种快速的RAD开发工具,并且提供了一组优秀的ADO组件;所以本文介绍一个在Delphi 7.0 下使用ADO访问达梦
数据库的小程序实例。
首先,在Delphi中设定如下程序界面:
ADO对象实际上就是COM对象,程序员可以直接在ObjectPascal中调用createOleObject方法来建立原生ADO对象;Delphi同时也提供的ADO组件封装了原生ADO对象,ADO组件包含了ADOConnection , ADOCommand , ADODataSet , ADOTable , ADOQuery , ADOStoreProc这几个组件,这五个组件统称为数据集组件,他们都封装了原生ADO的Record对象,我们在程序中使用了TADODataSet,TDataSource和TADOStoredProc三个控件,同时在程序运行时动态创建和使用了TADOConnection,TADOQuery对象。
下面这个演示程序可以管理数据库里的人员信息(包括TimeStamp,text,blob类型的数据),同时可以添加和修改人员对应的相片;
首先使用SYSDBA登录达梦数据库的JISQL工具,执行下面的数据库脚本:
create TABLE People_Info
(
p_id int primary key,
p_name varchar(20),
p_age int,
p_addr varchar(200),
p_des text,
p_pic blob,
p_born timestamp
);
create SEQUENCE SEQ_PEOPLE INCREMENT BY 1 START WITH 1;
create OR REPLACE PROCEDURE DEL_PINFO(v_id in int) AS
BEGIN
delete FROM People_Info where p_id = v_id;
END;
程序在运行时会动态的创建一个TADOConnect对象,效果和在设计程序时拖入一个TADOConnection组件是一样的,代码如下:
constructor TFormADO.create(AOwner: TComponent);
begin
inherited create(AOwner);
try
//数据库的连接字符串
Constr := “Provider=DMOLEDB.1;Password=SYSDBA;LoginPrompt=false;”+
“User ID=SYSDBA;Initial Catalog=SYSTEM;Data Source=Localhost”;
adocon := TADOConnection.create(self);
adocon.ConnectionString := Constr;
adocon.Connected := true;
ADODataSetPInfo.Connection := adocon;
ADODataSetPInfo.Active := true;
except
adocon.Connected := false;
MessageBox(self.Handle,”提示”,”数据库连接失败”,MB_OK);
end;
end;
添加人员信息的代码如下,其中的蓝色代码部分演示了使用TADOQuery控件来向达梦数据库中添加人员信息。
procedure TFormADO.btSaveClick(Sender: TObject);
var
adoqry : TADOQuery;
dt : TDateTime;
age : integer;
begin
if (adocon.Connected = false)then
begin
MessageBox(self.Handle,”数据库不可用,无法进行信息保存”,”提示”,MB_OK);
Exit;
end;
if (edName.Text = “”) then
begin
MessageBox(self.Handle,”人员姓名不能为空”,”提示”,MB_OK);
Exit;
end;
if (edAge.Text <> “”) then
begin
try
age := strtoint(edAge.Text);
except
MessageBox(self.Handle,”请输入有效年龄数字”,”提示”,MB_OK);
Exit;
end;
end;
if (edAddr.Text = “”) then
begin
MessageBox(self.Handle,”人员住址不能为空”,”提示”,MB_OK);
Exit;
end;
if (moDes.Text = “”) then
begin
MessageBox(self.Handle,”人员描述不能为空”,”提示”,MB_OK);
Exit;
end;
if (edBirthDay.Text <> “”) then
begin
try
dt := StrToDateTime(edBirthDay.Text);
except
MessageBox(self.Handle,”请输入有效格式日期,比如: 2007-09-10 12:00:03″,”提示”,MB_OK);
Exit;
end;
end;
try
adoqry := TADOQuery.create(self);
with adoqry do
begin
Connection := adocon;
adocon.BeginTrans();
SQL.Add(“insert into People_Info(p_id,p_name,p_age,p_addr,p_des,p_born) values(“+
“SEQ_PEOPLE.NEXTVAL,:p_name,:p_age,:p_addr,:p_des,:p_born)”);
Parameters.ParamByName(“p_name”).Value := edName.Text;
Parameters.ParamByName(“p_age”).Value := edAge.Text;
Parameters.ParamByName(“p_addr”).Value := edAddr.Text;
Parameters.ParamByName(“p_des”).Value := moDes.Text;
Parameters.ParamByName(“p_born”).Value := edBirthDay.Text;
execSQL();
adocon.CommitTrans();
Free;
end;
except
adocon.RollbackTrans();
adoqry.Free;
MessageBox(self.Handle,”人员信息保存失败”,”提示”,MB_OK);
Exit;
end;
ADODataSetPInfo.Active := false;
ADODataSetPInfo.Active := true;
end;
我们可以进行人员相片的更新,这个操作是使用TADODataSet组件来完成的,代码如下,蓝色部分是控件的使用。
procedure TFormADO.btupdatePhotoClick(Sender: TObject);
begin
if odPhoto.execute and Fileexists(odPhoto.FileName) then
begin
ADODataSetPInfo.Edit;
dbimPhoto.Picture.LoadFromFile(odPhoto.FileName);
ADODataSetPInfo.Post;
end;
end;
我们还可以进行人员信息的删除,这个操作使用TADOStoredProc控件,其中蓝色字体部分为 TADOStoredProc控件的使用,代码如下:
procedure TFormADO.N1Click(Sender: TObject);
var
bi : integer;
begin
if (adocon.Connected = false)then
begin
MessageBox(self.Handle,”数据库不可用,无法进行删除操作”,”提示”,MB_OK);
Exit;
end;
try
with ADOStoredProcDm do
begin
ADOStoredProcDm.Connection := adocon;
adocon.BeginTrans();
ADOStoredProcDm.Procedurename := “DEL_PINFO”;
ADOStoredProcDm.Parameters.createParameter (“v_id”,ftInteger
,pdInput,1,ADODataSetPInfo.FieldValues[“p_id”]);
ADOStoredProcDm.execProc;
adocon.CommitTrans();
end;
except
adocon.RollbackTrans();
MessageBox(self.Handle,”人员信息删除失败”,”提示”,MB_OK);
Exit;
end;
ADODataSetPInfo.Active := false;
ADODataSetPInfo.Active := true;
end;
本文大致介绍了如何使用ADO的一些对象(TADOConnection,TADOQuery,TADODataSet, TADOStoredPr和Delphi提供一些数据访问组件(TDBGRID,TDBImage)对达梦数据库中的各种数据(TimeStamp,text,blob,Varchar)进行访问和操作,希望能对在达梦数据库上使用ADO开发的工作人员有所帮助。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
达梦数据库携手赛凡科技全面启动战略合作
2015年10月27日,知名国产数据库厂商北京达梦数据库技术有限公司和国内自主创新存储厂商北京赛凡智慧科技有限公司战略合作协议签约仪式在北京举行。
-
配置SQL Server数据库和服务器别名(下)
用别名来引用数据库服务器和数据库对象的方法有很多种。如果分布式环境的物理结构需要修改时,使用别名可以最小化代码和应用配置中的修改。
-
配置SQL Server数据库和服务器别名(上)
大多数SQL Server应用访问相同数据库中的对象,但是有时我们会需要跳出这个数据库到相同服务器上的另一个数据库或者另一个SQL Server实例。
-
IntelliSense功能分析之对象名及分隔符匹配
当键入一个对象名时,如变量、模式、表、列或函数,IntelliSense将显示一个下拉列表,里面包含了函数中相应的对象名。