站内搜索:
免费注册 登陆     
您现在的位置:TT数据库 > 技巧 > 使用ADO访问达梦数据库
使用ADO访问达梦数据库
2008-6-19   | |

  微软的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开发的工作人员有所帮助。

 来源:开发者在线    作者:范嵘    
相关的新闻
 
相关的技巧
数据库系统是随着电脑技术的不断发展,在特定的历史时期、特定的需求环境下出现的。在1946年的第一台电脑到20世纪60年代这漫长的20年里,电脑操作系统主要局限于……
相关的专家答疑
 
相关的白皮书
数据库系统是随着电脑技术的不断发展,在特定的历史时期、特定的需求环境下出现的。在1946年的第一台电脑到20世纪60年代这漫长的20年里,电脑操作系统主要局限于……
DM4是武汉达梦公司于2004年初正式推的出国家863数据库重大专项项目产品——大型通用数据库管理系统,是新一代高性能数据库产品……
微软的Windows操作系统是当前应用程序的主流开发和使用平台,它提供了数种不同的数据访问存储技术,比较常见的有以下几种……
具有完全自主知识产权的达梦数据库管理系统DM4,是达梦公司长期潜心研究数据库管理系统的结晶。在电子政务应用中,由于数据具有开放性,所以首先强调的是数据安全……
Apache是当前最流行的 HTTP 服务器软件之一,它完全免费,完全源代码开放,并且在windows,unix和linux系统上都能运行。
作为Oracle E-Business Suite的初学者,应该从哪一部分开始学习?是Oracle Financials还是Oracle M
在上一个技术专题中我们提到了数据库安全,本篇继续介绍数据库安全的内容,包括如何限制用户的访问权限,并详细阐述了有关如何限制单一用户的访问权限、限制多个用户的访问权限、确保不同用户的
今天我们更加需要注意确保数据库安全。数据库安全当然包括数据库的用户名和密码安全问题。本文介绍设置用户名和密码的最佳方法、在授予或撤消用户访问权限时我们应该注意的事项以及我们能采取的
最新更新
专家答疑
技巧
Ian Abramson
我们想决定是否每晚都该进行增量更新和插入而不是复制产品系统。我知道增量表更新速度要快得多,但是有没有对该程序持反对意见的呢?有没有可能让文件脱离sync?
Ian Abramson
我是一名Oracle DBA。我想开始学习DW原理和其他的DW的其他资料。我还想紧跟这个行业的变化形势。你能给我们相关书籍和资料的建议吗?
Brian Peasland
数据仓储能在灾难恢复热站点上进行吗?Data Guard的优点之一就是你能将备用示例放在READ ONLY模式里,这样你就能在不影响Primary示例的情况下使报表接触到数据库。
TechTarget中国旗下网站群
All Rights Reserved, Copyright 2008, TechTarget中国
TechTarget中国