使用ADO访问达梦数据库

文章来自达梦技术社区http://bbs.dameng.com/

  微软的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
    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;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23392679/viewspace-627900/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23392679/viewspace-627900/

你可能感兴趣的:(使用ADO访问达梦数据库)