日期:2014-05-16  浏览次数:20552 次

在PB中如何动态注册ACCESS的ODBC数据库连接

在PB中如何动态注册ACCESS的ODBC数据库连接

//获取数据库文件

integer ret
string ls_Path, ls_File
ret = GetFileOpenName("选择以前的备份文件", ls_Path, ls_File, "MDB", "Access 文件 (*.MDB), *.MDB")
IF ret = 1 THEN
?if? ls_Path<>'' then
??sle_filename.text=ls_path
?end if
END IF
ChangeDirectory(sys_path)
string?? ls_system?? //系统目录??
?GetSystemDirectoryA(ls_system,256)??
//数据源的名称为SLGL_ACCESS_RESTORE
//删除原来的ODBC注册
string ls_Description='数据恢复连接'
string ls_AccessFilename
ls_AccessFilename=sle_FileName.Text
if not FileExists(ls_AccessFilename) then
?sle_filename.text=''
?messagebox(sys_ts,'恢复数据库文件不存在!')
?return
end if
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","DBQ")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","Description")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","Driver")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","DriverId")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","FIL")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","SafeTransactions")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE","UID")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet","ImplicitCommitSync")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet","MaxBufferSize")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet","PageTimeout")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet","Threads")??
RegistryDelete("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet","UserCommitSync")??
?//删除完成
?//建立新的ODBC对ACCESS数据库的连接
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','DBQ',RegString!,ls_AccessFilename)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','Description',RegString!,ls_Description)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','Driver',RegString!,ls_system?? +?? '\odbcjt32.dll')??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','DriverId',ReguLong!,25)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','FIL',RegString!,'MS Access;')??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','SafeTransactions',ReguLong!,0)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE','UID',"")??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet','ImplicitCommitSync',RegString!,"")??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet','MaxBufferSize',ReguLong!,2048)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet','PageTimeout',ReguLong!,5)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet','Threads',ReguLong!,3)??
RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\SLGL_ACCESS_RESTORE\Engines\Jet','UserCommitSync',RegString!,'Yes')??
//iDT_DateBeg,iDT_DateEnd