不安装客户端,使用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
|
|--bin1文件)
orantcp8.dll
|--ocommon
|--nls
|--ADMIN
|--DATA8文件)
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%,重启系统后生效。
Win2000WinXP需要在我的电脑>“属性>修改环境变量中的path变量,手工修改后马上生效无须重启,这个变量也可通过修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environmentpath的值设置,但需要重启系统后生效(已经解决,无须重启,代码见最后)。

说明:如果把这些文件和目录结构拷贝到系统目录下(Win2000Winnt\System32WinXP\Windows\System32Win9x\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小时内删除。