我想在程序中动态建立数据库与ODBC数据源的连接,以下代码能添加到用户DSN,但提示找不到驱动的路径,希望大家多帮忙!!!!var
  registertemp:tregistry;
  bdata:array[0..10] of byte;begin
  registertemp:=tregistry.Create;
  with registertemp do
    begin
  rootkey:=hkey_users;
  if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\ODBC.INI\ODBC Data Sources',true) then
    begin
    writestring('11','Driver do microsoft Access(*.mdb)');
    end
    else
    begin
      memo1.Lines.Add('增加ODBC数据源失败');
      exit;
      end;
      closekey;
      if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
      begin
      writestring('dbq','e:\矿物局软件\数据库\基础表\minedb.mdb');
      writestring('Description','我的数据源');
      writestring('Driver','C:\WINNT\System32\odbcjt32.dll');
      writeinteger('Driverid',25);
      writestring('fil','Ms Access');
      writeinteger('safeTransaction',0);
      writestring('uid','');
      bdata[0]:=0;
      writebinarydata('exclusive',bdata,1);
      writebinarydata('readonly',bdata,1);
      end
      else
        begin
          memo1.Lines.Add('增加数据源失败');
          exit;
        end;
        closekey;
        if  openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
           begin
              writestring('implicitcommitsync',' ');
              writeinteger('maxbuffersize',2048);
              writeinteger('pagetimeout',5);
              writeinteger('threads',3);
              writestring('usercommitsync','yes');
              end
           else
             begin
               memo1.lines.add('增加数据源失败');
               exit;
             end;
             closekey;
             memo1.lines.add('增加数据源成功');
             free;
             end;
        end;
end.
  大家没有验证的代码请不要添加,分不够可以再加!!!!!!!!!

解决方案 »

  1.   

    你用一个ADOCONNECTION..建完联接后..自已再手动看看那个connectionstring里面的内容..
    一个一个学着搬过用..就是了..
      

  2.   

    声明函数
    function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';
    实现//这个是用户级的{const
      ODBC_ADD_DSN        = 1;    // Add data source
      ODBC_CONFIG_DSN     = 2;    // Configure (edit) data source
      ODBC_REMOVE_DSN     = 3;    // Remove data source
      ODBC_ADD_SYS_DSN    = 4;    // add a system DSN
      ODBC_CONFIG_SYS_DSN = 5;    // Configure a system DSN
      ODBC_REMOVE_SYS_DSN = 6;    // remove a system DSN
    }//例子
    procedure TForm1.SeSkinButton3Click(Sender: TObject);
    begin
      SQLConfigDataSource(0, 4, 'Microsoft Access Driver (*.mdb)',
                          'DSN=TianCai' + Chr(0) +
                          'Server=(local)' + Chr(0) +
                          'DBQ=e:\TianCai.mdb' + Chr(0) +
                          'Description=Alex');
    end;
    给分吧!
      

  3.   

    const
      ODBC_ADD_DSN = 1;
      DNS_NAME = 'abcdefg';
    ...
      SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
                          'DSN=' + DSN_NAME + Chr(0) +
                          'Server=(local)' + Chr(0) +
                          'DBQ=' + pAccessFile + Chr(0) +
                          'Description=Alex');
      

  4.   

    tempreg:=Tregistry.create;
      with tempreg do
      begin
        rootkey:=HKEY_LOCAL_MACHINE;
        if KeyExists('Software\ODBC\ODBC.INI\wxzx')=false then
        begin
        if openkey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
        begin
          writestring('wxzx','Microsoft Access Driver (*.mdb)');
        end
        else
        begin
          showmessage('增加ODBC数据源失败!');
          halt;
        end;
        closekey;
        v_path:=extractfiledir(application.exename)+'\wxzx.mdb';
        rootkey:=HKEY_LOCAL_MACHINE;
        if openkey('Software\ODBC\ODBC.INI\wxzx',true) then
        begin
          writestring('DBQ',v_path);
          writestring('Description','wxzx');
          writestring('Driver','C:\WINDOWS\SYSTEM\ODBCJT32.DLL');
          writeinteger('DriverID',25);
          writestring('FIL','MS Access;');
          writeinteger('SafeTransactions',0);
          writestring('UID','bbs');
          byte1[0]:=0;
          writebinarydata('Exclusive',byte1,1);
          writebinarydata('ReadOnly',byte1,1);
        end
        else
        begin
          showmessage('增加ODBC数据源失败!');
          halt;
        end;
        closekey;
        rootkey:=HKEY_LOCAL_MACHINE;
        if openkey('Software\ODBC\ODBC.INI\wxzx\Engines\Jet',true) then
        begin
          writestring('ImplicitCommitSync','Yes');
          writeinteger('MaxBufferSize',2048);
          writeinteger('PageTimeout',5);
          writeinteger('Threads',5);
          writestring('UserCommitSync','Yes');
        end
        else
        begin
          showmessage('增加ODBC数据源失败!');
          halt;
        end;
        closekey;
      end
      else
      begin
        closekey;
        v_path:=extractfiledir(application.exename)+'\wxzx.mdb';
        rootkey:=HKEY_LOCAL_MACHINE;
        if openkey('Software\ODBC\ODBC.INI\wxzx',true) then
        begin
          writestring('DBQ',v_path);
          closekey;
        end
      end;
      end;