我用ole db 的方式连接了odbc数据源,但是有个问题:
   odbc的数据源是事先在控制面板里设置好了的,程序的移植性不强,我想请教一下那位大虾知道用程序的方法修改或者设置odbc数据源。

解决方案 »

  1.   

    delphi中直接用Ado连接,引擎是Provider=Microsoft.Jet.OLEDB.4.0。
      

  2.   

    直接用AdoConnection连接。引擎是:Provider=Microsoft.Jet.OLEDB.4.0
      

  3.   

    有个例子可以参考
    USES  Registry; procedure TForm1.Button1Click(Sender: TObject); 
    var 
      Temp : TRegistry; 
      bData : array[ 0..0 ] of byte; 
    begin 
      Temp := TRegistry.Create;  //建立一个Registry实例 
      with Temp 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( 'myaccess97', 'Microsoft Access Driver (*.mdb)' );      end 
         else 
         begin//创建键值失败 
              SHOWMESSAGE('增加ODBC数据源失败'); 
              exit; 
         end; 
         CloseKey;      //找到或创建Software\ODBC\ODBC.INI\myaccess97,写入DSN配置信息 
          if OpenKey('Software\ODBC\ODBC.INI\myaccess97',True) then 
          begin 
            WriteString( 'DBQ', 'C:\test.mdb' );//数据库目录 
            WriteString( 'Description','我的新数据源' );//数据源描述 
            WriteString( 'Driver', 'C:\WINDOWS\SYSTEM\odbcjt32.dll' );//驱 
    动程序DLL文件  ODBCJT32.DLL文件依据你的存放路径 
            WriteInteger( 'DriverId', 25 );   //驱动程序标识 
            WriteString( 'FIL', 'Ms Access;' ); 
           //Filter依据 
            WriteInteger( 'SafeTransaction', 0 );     //支持的事务操作数目         //若不存在用户,则为下面一句: 
            WriteString( 'UID', '' );//用户名称,若存在用户,则写入用户名 
            //若存在用户和密码,则为下面二句: 
            WriteString( 'UID', 'hns' );   //用户名 
            WriteString( 'PWD', '199911' );//口令 
            bData[0] := 0; 
            WriteBinaryData( 'Exclusive', bData, 1 );   //是否以独占方式打 
    开,1为是,默认为0 
            WriteBinaryData( 'ReadOnly', bData, 1 );    //是否以只读方式打 
    开,1为是,默认为0 
          end 
          else//创建键值失败 
          begin 
    showmessage('增加ODBC数据源失败'); 
    exit; 
          end; 
          CloseKey; 
         // 找到或创建Software\ODBC\ODBC.INI\myaccess97\Engines\Jet  写入D 
    SN数据库引擎配置信息 
         if OpenKey('Software\ODBC\ODBC.INI\myaccess97\Engines\Jet',True)  
    then 
         begin 
           WriteString( 'ImplicitCommitSync', 'Yes' ); //表示是否立即反映数 
    据修改 
           WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小 
           WriteInteger( 'PageTimeout', 10 );//页超时 
           WriteInteger( 'Threads', 3 );//支持的线程数目 
           WriteString( 'UserCommitSync', 'Yes' ); //表示是否立即将数据修改 
    反映到用户 
         end 
         else//创建键值失败 
         begin 
           showmessage('增加ODBC数据源失败'); 
           exit; 
         end; 
         CloseKey; 
         showmessage('增加新ODBC数据源成功'); 
         Free; 
       end; 
    end;     
      

  4.   

    dephi 中有很多ADO组件的呀,用起来很方便,有ADO组件面板上
      

  5.   

    不用配odbc。在除了98的机子上可以直接用,动态连接如下:
      Try
        MainConnection.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\DB\UniCom.mdb;Mode=Share Deny None;';
        MainConnection.Connected :=True;
      Except
        Application.MessageBox('不能连接到系统数据库!','错误',MB_OK OR MB_ICONERROR);
        Application.Terminate;
      end;