如何在程序中自动注册SQL Server的ODBC?

解决方案 »

  1.   

    不想再重写代码了,我贴一个Access的给你,原理是一样的:procedure CreateODBC(DBType, vsUID, vsPWD: String);
    const
      RegODBCDB       = 'SoftWare\ODBC\ODBC.INI\';
      ODBCINIFile     = 'ODBC.ini';
      RegAccessDB     = 'SoftWare\ODBC\ODBC.INI\MS Access Database';
      RegSubAccessDB  = 'SoftWare\ODBC\ODBC.INI\MS Access Database\Engines\Jet';
      ODBC32bSection  = 'ODBC 32 bit Data Sources';
      EngSetup        = 'SoftWare\ODBC\ODBC.INI\ODBC Data Sources';
      WallyAliasName   = 'WallyDB';
      MDBFile          = 'WallyDB.MDB';
    var
      ODBCIni: TIniFile;
      Reg: TRegistry;
      vDriver: String;
      vImplicitCommitSync,  vUserCommitSync: string;
      vDriverID, vSafeTransactions, vThreads: integer;
    begin
      try
        Reg := TRegistry.Create;
        with Reg do
        begin
          RootKey := HKEY_CURRENT_USER;
          if OpenKey(RegAccessDB, False) then
          begin
             vDriver := ReadString('Driver');
             vDriverID := ReadInteger('DriverId');
             vSafeTransactions := ReadInteger('SafeTransactions');
             CloseKey;
          end
          else
            Showmessage('OS can''t supporting DataBase type');
          if OpenKey(RegSubAccessDB, False) then
          begin
            vImplicitCommitSync := ReadString('ImplicitCommitSync');
            vThreads := ReadInteger('Threads');
            vUserCommitSync := ReadString('UserCommitSync');
            CloseKey;
          end;
        end;
      finally
        Reg.Free;
      end;
      try
        ODBCIni := TIniFile.Create(vOSPath +ODBCINIFile);
        with ODBCIni do
        begin
          WriteString(ODBC32bSection, WallyAliasName, 'Microsoft Access Driver (*.mdb) (32 位元)');
          WriteString(WallyAliasName, 'Driver32', vDriver);
        end;
      finally
        ODBCIni.Free;
      end;
      try
        Reg := TRegistry.Create;
        with Reg do
        begin
          RootKey := HKEY_CURRENT_USER;
          CreateKey(RegODBCDB +WallyAliasName);
          if OpenKey(RegODBCDB +WallyAliasName, False) then
          begin
            WriteString('DBQ', DBPath+MDBFile);
            WriteString('Driver', vDriver);
            WriteString('FIL', DBType);
            WriteString('UID', vsUID);
            WriteString('PWD', vsPWD);
            WriteInteger('DriverID', vDriverID);
            WriteInteger('SafeTransactions', vSafeTransactions);
            CloseKey;
          end;
          CreateKey(RegODBCDB +WallyAliasName +'\Engines\Jet');
          if OpenKey(RegODBCDB +WallyAliasName +'\Engines\Jet', False) then
          begin
            WriteString('ImplicitCommitSync', vImplicitCommitSync);
            WriteString('UserCommitSync', vUserCommitSync);
            WriteInteger('MaxBufferSize', 2048);
            WriteInteger('PageTimeout', 5);
            WriteInteger('Threads', vThreads);
            CloseKey;
          end;
          if OpenKey(EngSetup, False)then
          begin
            CreateKey(WallyAliasName);
            WriteString(WallyAliasName, 'Microsoft Access Driver (*.mdb)');
            CloseKey;
          end;
        end;
      finally
        Reg.Free;
      end;
    end;
      

  2.   

    BBS水木清华站∶精华区
    发信人: cuterat (学习的革命), 信区: VisualBasic        
    标  题: Re: 如何用程序实现ODBC的连接即自动生成一个数据源? 
    发信站: BBS 水木清华站 (Wed Feb 24 12:09:21 1999) 
     
     
    我不赞成读写注册表定制 DSN 
    调用ODBC32 API 比较好 
    例子: 
     
    在模块文件中的API和常数声明: 
     
    Public Const ODBC_ADD_DSN = 1 
    Declare Function SQLConfigDataSource Lib "odbccp32.dll" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Boolean 
     
    在窗体上加command button:cmdReg 
     
    Private Sub cmdReg_Click() 
        Dim szDriver As String 
        Dim szAttributes As String 
        Dim retcode As Boolean 
         
        szAttributes = "DSN=my65dsn" & Chr(0) _ 
            & "DESCRIPTION=SQLConfigDSN Sample" & Chr(0) _ 
            & "SERVER=Myserver" & Chr(0) _ 
            & "ADDRESS=192.168.64.67,1433" & Chr(0) _ 
            & "NETWORK=dbmssocn" & Chr(0) _ 
            & "DATABASE=pubs" & Chr(0) 
         
        szDriver = "SQL Server" & Chr(0) 
        retcode = SQLConfigDataSource(Me.HWND, ODBC_ADD_DSN, szDriver, szAttributes) 
    End Sub 
     
    如果参数 lpszAttributes 给出的参数不够完备,会弹出对话窗体。 
      

  3.   

    简单点,使用InstallShield软件,它提供了对注册复制功能。