怎样通过编程修改ODBC的配置???? 怎样通过编程修改ODBC的配置???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 {*******************************************************在本程序中 ,将创建一个 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 有不同 ) 如何得知程序创建了新的窗口实例,并获取该窗口实例? 如何通过delphi实现从网上连接并显示图片。 为什么运行的时候QuickReport会提示Property UseStandardprinter does not exist的错误? 大家用什么做delphi6的安装包啊 SQL问题 如何在程序运行完后关机呢? 开发一个单机图上地图程序. 在某一程序前插入我的程序问题 我用Query动态建立一个数据表,但是我在程序中怎么删除这个表呢?主要是怎么获得表的绝对路径? delphi 中指针怎么用? 需求温度计、湿度计控件,有源码更好!!! 函数和宏的3点区别是什么?(无)
{ 注意应在 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 有不同 )