请问如何动态设置ODBC,我的数据库名为DB1.MDB,用的是ACCESS数据库.
数据源为sun,数据库的用户名和密码为空。请问用代码如何实现。多谢。

解决方案 »

  1.   

    你既然是用的Access我建议你用微软公司的Ado连接数据库,去看一看Delphi下的帮助吗!
      

  2.   

    http://expert.csdn.net/Expert/topic/2303/2303917.xml?temp=.2089197
    看看他吧:)
      

  3.   

    我来!
    procedure  TDM.CreateDSN;
    var
      registerTemp : TRegistry;
      bData : array[ 0..0 ] of byte;
      SysDir : array[0..255] of char;
      Str : String;
    begin
      str:=ExtractFileDir(application.exename)+'\userinfo.mdb';
      registerTemp := TRegistry.Create;
      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( 'MyAccess', 'Microsoft Access Driver (*.mdb)' ); 
                  end 
                else 
                  begin//创建键值失败
               showmessage('增加ODBC数据源失败'); 
               exit; 
              end; 
              CloseKey;         //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息 
              if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then 
                begin 
                  GetSystemDirectory(SysDir,sizeof(SysDir)-1);//得到系统路径   
                  WriteString( 'DBQ',str );//数据库目录 
                  WriteString( 'Description', '我的新数据源' );//数据源描述 
                  WriteString( 'Driver',  SysDir+'\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 
               exit; 
              end; 
              CloseKey;         //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet 
            //写入DSN数据库引擎配置信息 
              if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then 
                begin 
                   WriteString( 'ImplicitCommitSync', 'Yes' ); 
                   WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小 
                   WriteInteger( 'PageTimeout', 10 );//页超时 
                   WriteInteger( 'Threads', 3 );//支持的线程数目 
                   WriteString( 'UserCommitSync', 'Yes' ); 
                end 
                else//创建键值失败 
                begin 
                  exit; 
                end; 
               CloseKey; 
              Free;
           end;