怎样通过编程修改ODBC的配置????

解决方案 »

  1.   

    {*******************************************************在本程序中 ,将创建一个 ODBC 系统数据源 (DSN),  数据源名称 :MyAccess  数据源描述 : 我的新数据源   数据库类型 :ACCESS97  对应数据库 :C:\Inetpub\wwwroot\test.mdb*******************************************************}
    {  注意应在 USES 语句中包含 Registry }
    procedure TForm1.Button1Click(Sender: TObject);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( 'MyAccess', 'Microsoft Access Driver (*.mdb)' );       end    else     begin      // 创建键值失败       memo1.lines.add(' 增加 ODBC 数据源失败 ');      exit;    end;
       CloseKey;
       // 找到或创建 Software\ODBC\ODBC.INI \MyAccess,写入 DSN 配置信息    if OpenKey('Software\ODBC\ODBC.INI \MyAccess',True) then     begin      WriteString( 'DBQ', 'C:\inetpub\wwwroot \test.mdb' );// 数据库目录       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     memo1.lines.add(' 增加 ODBC 数据源失败 ');     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     memo1.lines.add(' 增加 ODBC 数据源失败 ');     exit;    end;
       CloseKey;
       memo1.lines.add(' 增加新 ODBC 数据源成功 ');   Free;  end;end;
      以上程序在 PWIN98+DELPHI3.0 下调试通过. 
      下面是创建常见数据库类型的 DSN 需要设置的信息 ([] 为注释内容 ,除特殊注释外 ,各   参数可见前面说明 ):
      1. Access(Microsoft Access Driver(*.mdb))
    DBQ 、 Description 、 Driver[odbcjt32.dll] 、  DriverID[25] 、 FIL[Ms Access;] 、 SafeTransaction[ 默认为 0] 、 UID[ 默认为空 ] 、 Engines\Jet\ImplicitCommitSync[ 默认为 Yes] 、 Engines\Jet\MaxBufferSize[ 默认 512] 、 Engines\Jet\PageTimeout[ 默认为 512] 、 Engines\Jet\Threads[ 默认为 3] 、 Engines\Jet\UserCommitSync[ 默认为 Yes]可选设置 :SystemDb[ 字符串 ,系统数据库的路径 ] 、 ReadOnly[ 二进制 ,是否以只读方式打开 ,1 为是 ,默认为 0] 、 Exclusive[ 二进制 ,是否以独占方式打开 ,1 为是 ,默认为 0] 、 PWD[ 字符串 ,用户密码 ]
      2. EXCEL(Microsoft Excel Driver(*.xls))
    DBQ[Excel97(=path\xxx.xls) 、 5.0/7.0 (=path\xxx.xls) 、 4.0(=path) 、 3.0(=path)] 、 Description 、 Driver[odbcjt32.dll] 、 DefaultDir[Excel97(< >DBQ) 、 5.0/7.0 (< >DBQ) 、 4.0(=DBQ) 、 3.0(=DBQ)] 、 DriverID[790(Excel97) 、 22(5.0/7.0) 、 278(4.0) 、 534(3.0)] 、 FIL[Excel5.0;] 、 ReadOnly 、 SafeTransaction 、 UID 、 Engines\Excel\ImplicitCommitSync 、 Engines\Excel\MaxScanRows[ 数字 ,扫描行数 ,默认为 8] 、 Engines\Excel\Threads 、 Engines\Excel\UserCommitSync 、 Engines\Excel\FirstRowHasName[ 二进制 ,第一行是否是域名 , 1 表示是 ,默认为 1]
      注 : Excel97 和 Excel7.0/5.0 的 DBQ 对应一个 XLS 文件 ,而 Excel4.0 和 Excel3.0 则对应   一个目录 ;DefaultDir 对应一个目录 ,在 Excel97 和 Excel7.0/5.0 中是 DBQ 所对应的路径 ,  而在 Excel4.0 和 Excel3.0 下则与 DBQ 相同 ; 各个版本的 DriverID 不同. 
      3. dBase(Microsoft dBase Driver(*.dbf))
    DefaultDir[ 字符串 ,数据库文件所在目录 ] 、 Description 、 Driver[odbcjt32.dll] 、 DriverID[277(IV) 、 533(5.0)] 、 FIL[dbase III;] 、 SafeTransaction 、 UID 、 Engines\Xbase\ImplicitCommitSync 、 Engines\Xbase\Collating[ 字符串 ,排序依据 ,  可为 ASCII 、 International 、 Norwegian-Danish 、  Swedish-Finnish] 、 Engines\Xbase\Deleted[ 二进制 ,是否不显示   被软删除的记录 ,0 表示显示 ,默认为 1] 、 Engines\Xbase\PageTimeout[ 默认为 600] 、 Engines\Xbase\UserCommitSync 、 Engines\Xbase\Threads 、 Engines\Xbase \Statistics[ 二进制 ,是否用大约的行数 ,1 为是 ,默认 0]  注 :(dBaseIV 和 dBase5.0 两个版本的 DriverId 有不同 )
      4. Foxpro(Microsoft Foxpro Driver(*.dbf))
    DefaultDir[ 数据库文件所在目录 ] 、 Description 、 Driver[odbcjt32.dll] 、 DriverID[536(2.6) 、 280(2.5)] 、 FIL[Foxpro 2.0;] 、 SafeTransaction 、 UID 、 Engines\Xbase\Collating[ 字符串 ,  排序依据 ,可为 ASCII 、 International] 、 Engines\Xbase\Deleted[ 二进制 ,是否不显示   被软删除的记录 ,0 表示显示 ,默认为 1] 、 Engines\Xbase\PageTimeout[ 默认为 600] 、 Engines\Xbase\UserCommitSync 、 Engines\Xbase\Threads 、 Engines\Xbase \Statistics[ 二进制 ,是否用大约的行数 ,1 为是 ,默认 0]  注 :(Foxpro2.5 和 Foxpro2.6 两个版本的 DriverId 有不同 )