Delphi中用ADO控件连接数据库例子

 

一、说明
    最近在写个“数据库管理系统框架程序”,其中封装了几个连接数据库的函数,觉得挺好用,拿出来与大家分享下,希望能对大家有点用处。
    我以连接oracle和access为例,其余数据库连接在此基础上稍加修改,便可使用。
二、连接oracle
    1 、源码
    {
      功能:连接ORACLE数据库
      参数:sServerName ORACLE服务名,sUserName 用户名,sUserPwd 密码
    }
    function LinkOracle(sServerName, sUserName, sUserPwd: string): boolean;
    begin
     Result := True;
     if _adoConn <> nil then _adoConn.Free;
     _adoConn := TADOConnection.Create(nil);
     _adoConn.ConnectionString := 'Provider=MSDAORA.1;'+
                                   'Password='+sUserPwd+';'+
                                   'User ID='+sUserName+';'+
                                   'Data Source='+sServerName+';'+
                                   'Persist Security Info=True';
     _adoConn.LoginPrompt := False;
   
     try
        _adoConn.Open;
     except
        on E: Exception do
        begin
          Application.MessageBox(PChar(' 连接ORACLE失败!原因:' + E.message), '系统错误', MB_OK+MB_ICONERROR);
          Result := False;
        end;
     end;
    end;   
   
    {
      功能:返回成功连接上数据库的ADOConnection实例
    }
    function GetAdoConnection: TADOConnection;
    begin
     Result := _adoConn;
     if _adoConn = nil then
     begin
        Application.MessageBox(' 尚未创建数据库连接!', '系统错误', MB_OK+MB_ICONERROR);
        Exit;
     end;
     try
        if not _adoConn.Connected then
          _adoConn.Connected := True;
     except
        on E: Exception do
          Application.MessageBox(PChar('Exception in GetAdoConnection: '+E.Message), ' 系统错误', MB_OK+MB_ICONERROR);
     end;
    end;
 
    上面是我封装的连接oracle的函数,下面对代码进行简单介绍:
    _adoConn 是 TADOConnection 变量,被申明成在单元内可见的变量,这样方便在LinkOracle和GetAdoConnection中共同使用,又不至于对其他单元文件产生影响。
   
    2 、应用举例
    例子:假设数据库服务名是orcl,用户名是scott,密码是tiger,连接该用户,并查出该用户有几张表。
   
    begin
        if not LinkOracle('orcl', 'scott', 'tiger') then
        begin
            showmessage(' 连接数据库失败');
            Exit;
        end;
       
        with TADOQuery.Create(nil) do
        try
            Connection := GetAdoConnection;
            sql.add(' select count(*) cnt from tab ');
            open;
            showmessage(' 共有' + fieldbyname('cnt').AsString + '张');
        finally
            close;
            free;
        end;
    end;
   
三、连接access
    1 、源码
        {
          功能:创建AccessODBC数据源
          参数:sDsn为数据源的名称, sMdbPath为数据库的名称包括目录, sUserId为用户名, sUserPwd为密码
        }
        function CreateAccessODBCDataSource(sDsn, sMdbPath, sUserId, sUserPwd: string): boolean;
        var
         Reg: TRegistry;
         bData : array[ 0..0 ] of byte;
        begin
         Reg :=TRegistry.Create;
         with Reg do
         begin
            RootKey:=HKEY_LOCAL_MACHINE;
            if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',true) then
            begin
              WriteString(sDsn,'Microsoft Access Driver (*.mdb)');
            end
            else
            begin
              Result:=False;
              Application.MessageBox(' 创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR);
              Exit;
            end;
            CloseKey;
       
            if OpenKey('Software/ODBC/ODBC.INI/'+sDsn,true) then
            begin
              WriteString('DBQ', sMdbPath);// 数据库目录
              WriteString('Description',sMdbPath+' 数据源');
              WriteString('Driver','C:/Windows/System32/odbcjt32.dll');
              WriteInteger('DriverId', 25 );
              WriteString('FIL', 'Ms Access;');     //Filter 依据
              WriteInteger('SafeTransaction', 0 ); // 支持的事务操作数目
              WriteString('UID', sUserId); // 用户名称
              WriteString('PWD', sUserPwd); // 用户密码
              bData[0] := 0;
              WriteBinaryData('Exclusive', bData, 1 );// 非独占方式
              WriteBinaryData('ReadOnly', bData, 1 );// 非只读方式 
            end
            else
            begin
              Result:=False;
              Application.MessageBox(' 创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR);
              Exit;
            end;
            CloseKey;
       
            if OpenKey('Software/ODBC/ODBC.INI/'+sDsn+'/Engines/Jet',true) then
            begin
              WriteString('ImplicitCommitSync','Yes');
              WriteInteger('MaxBufferSize',2048 );// 缓冲区大小
              WriteInteger('PageTimeout',5 );// 页超时
              WriteInteger('Threads',3 );// 支持的线程数目
              WriteString('UserCommitSync','Yes');
            end
            else
            begin
              Result:=False;
              Application.MessageBox(' 创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR);
              Exit;
            end;
            CloseKey;
            Result:=True;
            Free;
         end;
        end;
       
        {
          功能:连接ACCESS
          参数:sDsn为数据源的名称
        }
        function LinkAccess(sDsn: string): Boolean;
        begin
         Result := True;
         if _adoConn <> nil then _adoConn.Free;
         _adoConn := TADOConnection.Create(Application);
         _adoConn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=' + sDsn;
         _adoConn.LoginPrompt := False;
       
         _adoConn.Open;
         if not _adoConn.Connected then
         begin
            Application.MessageBox(' 连接ACCESS失败!', '系统错误', MB_OK+MB_ICONERROR);
            Result := False;
         end;
        end;
       
        {
          功能:返回成功连接上数据库的ADOConnection实例
        }
        function GetAdoConnection: TADOConnection;
        begin
         Result := _adoConn;
         if _adoConn = nil then
         begin
            Application.MessageBox(' 尚未创建数据库连接!', '系统错误', MB_OK+MB_ICONERROR);
            Exit;
         end;
         try
            if not _adoConn.Connected then
              _adoConn.Connected := True;
         except
            on E: Exception do
              Application.MessageBox(PChar('Exception in GetAdoConnection: '+E.Message), ' 系统错误', MB_OK+MB_ICONERROR);
         end;
        end;
       
        上面是我封装的连接access的函数,下面对代码进行简单介绍:
        _adoConn 是 TADOConnection 变量,被申明成在单元内可见的变量,这样方便在LinkAccess和GetAdoConnection中共同使用,又不至于对其他单元文件产生影响。
    2 、应用举例
        举例:我在e盘下有个access文件,名为db1.mdb, 该文件设了密码也为db1。下面代码为连接该文件的例子
       
        begin
         if CreateAccessODBCDataSource('accessDataSource', 'e:/db1.mdb', 'db1', 'db1') then
         begin
            if LinkAccess('accessDataSource') then
            begin
              with TADOQuery.Create(nil) do
              try
                Connection := GetAdoConnection;
                SQL.Clear;
                SQL.Add(' 自己写吧');
                Open;
              finally
                close;
                Free;
              end;
            end;
         end;
        end;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值