不安装客户端,使用ADO访问Oracle 8.1.6数据库解决方案。
2007-11-19 20:54
作者 : dirk 标题 : 不安装客户端,使用ADO访问Oracle 8.1.6数据库解决方案。 关键字: Oracle 不安装客户端 分类 : 程序 密级 : 公开 (评分: , 回复: 0, 阅读: 3765) »» | 最近因为工作需要,花了些时间研究了一下不安装客户端,如何使用ADO访问Oracle 8.1.6数据库,整理了一下,只需要43个文件(8.46 MB),添加若干注册表内容,注册一个文件,就可以了做到了,现在把这些完整贴出来,希望有人能够用的到。
另外:Oracle 8.1.6驱动也可以用于连接Oracle 9i的数据库,但我没有用下面的“五、程序中ADO连接字符串写法”测试过,现在没有9i的环境,还望有条件的朋友帮忙测试一下(已测试过,可以)。
Oracle 8.1.6 OLEDB 驱动
目录、文件结构:
主目录(34文件) oci.dll OCIW32.DLL oracle.key oraclient8.dll oracommon8.dll ORACORE8.DLL orageneric8.dll oraldapclnt8.dll oran8.dll ORANCDS8.DLL orancrypt8.dll oranhost8.dll oranl8.dll oranldap8.dll ORANLS8.DLL orannds8.dll orannms8.dll orannzsbb8.dll oranoname8.dll oranro8.dll orantns8.dll OraOLEDB.dll oraoledbgmr.dll OraOLEDBPUS.dll OraOLEDBrmc.dll OraOLEDBrst.dll OraOLEDButl.dll OraOLEDBzhs.dll ORAPLS8.DLL ORASLAX8.dll ORASQL8.DLL ORATRACE8.DLL oravsn8.dll orawtc8.dll | |--bin(1文件) orantcp8.dll |--ocommon |--nls |--ADMIN |--DATA(8文件) LX00001.NLB LX00023.NLB LX10001.NLB LX10035.NLB LX1BOOT.NLB LX20001.NLB LX20354.NLB LX60354.NLB
以上为所有所需文件,其中OraOLEDBzhs.dll好像不要也无所谓,反正也不大,看文件名也是ADO需要的,就带上了;OraOLEDBrmc.dll好像也可以不要,但是我的程序dll中链接Oralce少了这个文件就会跳出个非法操作,可继续也没问题(模模糊糊的说了两个“好像”,其实我也记不清是不是这两个文件了,几天前反复了n次试出来的,当时没记录,嘿嘿……)。
配置、操作过程:
一、将以上文件及目录结构拷贝到一个目录
二、注册OraOLEDB.dll文件:REGSVR32.EXE OraOLEDB.dll。
三、路径: Win9x需要修改Autoexec.bat文件的环境变量path,只需在批处理文件中增加一行:path=<安装路径>;%path%,重启系统后生效。 Win2000、WinXP需要在“我的电脑”->“属性”->修改环境变量中的path变量,手工修改后马上生效无须重启,这个变量也可通过修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment下path的值设置,但需要重启系统后生效(已经解决,无须重启,代码见最后)。
说明:如果把这些文件和目录结构拷贝到系统目录下(Win2000为Winnt\System32、WinXP为\Windows\System32、Win9x为\Windows\System)则可以不需要设置环境变量path。
四、修改注册表,最后部分为需要修改的注册表内容,把文本保存为reg文件导入即可,其中两处C:\\Winnt\\System32需要修改成文件实际拷贝的目录。
五、程序中ADO连接字符串写法:
Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = <服务器名称或IP>)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = <全局数据库名称>)));User ID=<用户名>;Password=<密码>
在<>中填进相应的值,就可连接上Oracle数据库了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0] "ORACLE_HOME"="C:\\Winnt\\System32"
"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\OLEDB] "CacheType"="Memory" "ChunkSize"="100" "DistribTX"="1" "FetchSize"="100" "OSAuthent"="0" "PLSQLRSet"="0" "PwdChgDlg"="1" "SchRstLng"="10000" "UserDefFn"="0" "DisableRetClause"="1" "VCharNull"="1" "TraceCategory"="0" "TraceFileName"="c:\\" "TraceLevel"="0" "TraceOption"="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.Oracle.1] @="Oracle Provider for OLE DB"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.Oracle.1\CLSID] @="{3F63C36E-51A3-11D2-BB7D-00C04FA30080}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.Oracle] @="Oracle Provider for OLE DB"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.Oracle\CLSID] @="{3F63C36E-51A3-11D2-BB7D-00C04FA30080}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.Oracle\CurVer] @="OraOLEDB.Oracle.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.ErrorLookup.1] @="Oracle OLE DB Error Lookup"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.ErrorLookup.1\CLSID] @="{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.ErrorLookup] @="Oracle OLE DB Error Lookup"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.ErrorLookup\CLSID] @="{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OraOLEDB.ErrorLookup\CurVer] @="OraOLEDB.ErrorLookup.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraSession.3] @="Oracle Objects For OLE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraSession.3\CLSID] @="{3893B4A0-FFD8-101A-ADF2-04021C007002}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraSession] @="Oracle Objects For OLE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraSession\CLSID] @="{3893B4A0-FFD8-101A-ADF2-04021C007002}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraSession\CurVer] @="OracleInProcServer.XOraSession.3"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraServer.3] @="Oracle Objects For OLE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraServer.3\CLSID] @="{5CEA8296-F9B9-11D1-9E07-00C04FC2BED8}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraServer] @="Oracle Objects For OLE"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraServer\CLSID] @="{5CEA8296-F9B9-11D1-9E07-00C04FC2BED8}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OracleInProcServer.XOraServer\CurVer] @="OracleInProcServer.XOraServer.3"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ORADC.ORADCCtrl.1] @="ORADC Control"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ORADC.ORADCCtrl.1\CLSID] @="{EC4CF635-D196-11CE-9027-02608C4BF3B5}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}] @="OraOLEDB.Oracle" "OLEDB_SERVICES"=dword:ffffffff
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ExtendedErrors] @="Extended Error Lookup Service"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ExtendedErrors\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}] @="Oracle OLE DB Error Lookup"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\InprocServer32] @="C:\\Winnt\\System32\\OraOLEDB.dll" "ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\OLE DB Provider] @="Oracle Provider for OLE DB"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ProgID] @="OraOLEDB.Oracle.1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\TypeLib] @="{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\VersionIndependentProgID] @="OraOLEDB.Oracle" 2004-7-26 11:16:17 2004-7-26 16:08:17 另外一个小问题也解决了。 自己写了个小程序,点一个按钮就把 Oracle 8.1.6 OLEDB 如何连接oracle数据库驱动安装、注册好,但是碰到一个小问题,在程序中把安装好的Oracle驱动的路径写进环境变量Path,我用代码:
FReg.WriteString('Path',FFPath+';'+k); SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
但是在dos下查看path却发现,路径中的%SystemRoot%并未被替换成相应的C:\Winnt,而是原样显示为%SystemRoot%,google了半天,也没搞定,忽然发现,注册表中path的类型和别的不太一样,是REG_EXPAND_SZ,难道……马上改用
FReg.WriteExpandString('Path',FFPath+';'+k); SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
果然搞定。 2004-10-21 16:41:48 已试过,用在Oracle 9i没问题。 | |
|
|
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论