在DELPHI程序中动态设置ODBC数据源(2/2)
//找到或创建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有不同)
---- 把上面程序做成一个COM或ActiveX控件吧,在很多高级程序设计语言如DELPHI、C++Buider、VB、VC、PB中都能用到的.