odbc和bde当然不同了。可以不用bde引擎的。
你用ado连接数据库,一般是不用另外安装ado的。因为装了sql,office就可以有相应的ado驱动了。可以装个mdac2.7or2.6。

解决方案 »

  1.   

    其实使用ADO最好,98以上的系统对ado的支持是比较好的。
    使用ADO安装发布不需要安装ADO,当然如果真的需要的话,就打包ADOC吧!
    ----------------------------------------
    ODBC需要修改注册表:自己琢磨一下了!!
    以下创建access的ODBC DSN(系统dsn和用户DSN两种)的办法:Function CreateAccessDsn(const myDSN, strFileName:String):string;
    var
      registerTemp : TRegistry;
      bData : array[ 0..0 ] of byte;
    begin
       registerTemp := TRegistry.Create; //建立一个Registry实例
       with registerTemp do
          begin
        RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE    //找到Software\ODBC\ODBC.INI\ODBC Data Sources
        if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
        begin //注册一个DSN名称
             WriteString( myDSN, 'Microsoft Access Driver (*.mdb)' );
          end
          else
          begin//创建键值失败
      Result :='增加ODBC数据源失败';
      exit;
          end;
          CloseKey;  //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息
        if OpenKey('Software\ODBC\ODBC.INI\'+MyDSN,True) then
        begin
             WriteString( 'DBQ', strFileName);//数据库目录
             WriteString( 'Description', '我的新数据源' );//数据源描述
             WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );//驱动程序DLL文件
             WriteInteger( 'DriverId', 25 );//驱动程序标识
             WriteString( 'FIL', 'Ms Access;' );//Filter依据
             WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
             WriteString( 'UID', '' );//用户名称
             bData[0] := 0;
             WriteBinaryData( 'Exclusive', bData, 1 );//非独占方式
             WriteBinaryData( 'ReadOnly', bData, 1 );//非只读方式
          end
          else//创建键值失败
          begin
      Result :='增加ODBC数据源失败';
      exit;
      end;
        CloseKey;  //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet
      //写入DSN数据库引擎配置信息
          if OpenKey('Software\ODBC\ODBC.INI\'+MyDSN+'\Engines\Jet',True) then
        begin
             WriteString( 'ImplicitCommitSync', 'Yes' );
             WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
             WriteInteger( 'PageTimeout', 10 );//页超时
             WriteInteger( 'Threads', 3 );//支持的线程数目
             WriteString( 'UserCommitSync', 'Yes' );
          end
          else//创建键值失败
          begin
             Result :='增加本地 accessODBC数据源失败!';
             exit;
          end;
          CloseKey;      Result :='增加新本地 access ODBC数据源成功!';
          Free;
       end;end;Function CreateAccessUserDsn(const myDSN, strFileName:String):string;
    var
      registerTemp : TRegistry;
      bData : array[ 0..0 ] of byte;
    begin
       registerTemp := TRegistry.Create; //建立一个Registry实例
       with registerTemp do
          begin
    //     RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE
        RootKey:=HKEY_Current_USER;//设置根键值为HKEY_LOCAL_MACHINE    //找到Software\ODBC\ODBC.INI\ODBC Data Sources
        if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
        begin //注册一个DSN名称
             WriteString( myDSN, 'Microsoft Access Driver (*.mdb)' );
          end
          else
          begin//创建键值失败
      Result :='增加ODBC数据源失败';
      exit;
          end;
          CloseKey;  //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息
        if OpenKey('Software\ODBC\ODBC.INI\'+MyDSN,True) then
        begin
             WriteString( 'DBQ', strFileName);//数据库目录
             WriteString( 'Description', '我的新数据源' );//数据源描述
             WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );//驱动程序DLL文件
             WriteInteger( 'DriverId', 25 );//驱动程序标识
             WriteString( 'FIL', 'Ms Access;' );//Filter依据
             WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
             WriteString( 'UID', '' );//用户名称
             bData[0] := 0;
             WriteBinaryData( 'Exclusive', bData, 1 );//非独占方式
             WriteBinaryData( 'ReadOnly', bData, 1 );//非只读方式
          end
          else//创建键值失败
          begin
      Result :='增加ODBC数据源失败';
      exit;
      end;
        CloseKey;  //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet
      //写入DSN数据库引擎配置信息
          if OpenKey('Software\ODBC\ODBC.INI\'+MyDSN+'\Engines\Jet',True) then
        begin
             WriteString( 'ImplicitCommitSync', 'Yes' );
             WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
             WriteInteger( 'PageTimeout', 10 );//页超时
             WriteInteger( 'Threads', 3 );//支持的线程数目
             WriteString( 'UserCommitSync', 'Yes' );
          end
          else//创建键值失败
          begin
             Result :='增加本地 accessODBC数据源失败';
             exit;
          end;
          CloseKey;      Result :='增加新本地 accessODBC数据源成功';
          Free;
       end;
    end;
    //调用方法
    procedure TForm1.Button2Click(Sender: TObject);
    var
       strTemp : string;
    begin
       strTemp:=CreateAccessUserDsn(trim(Edit1.Text), trim(FileNameEdit2.Text));  
       //Edit1.Text表dsn名, FileNameEdit2.Text指向access文件所在路径
       ShowMessage(strTemp);end;