vc com中连接ORACLE问题,都要疯掉了,谁能告诉我啊

sunht 2003-10-18 04:25:46
总是提示“UNKNOWN ERROR,未找到提供者,可能是没有安装”
ORACLE我都安装了800遍了,系统也重新安装了好几次,就是不行啊
到底怎么回事
...全文
272 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingjust 2003-10-21
  • 打赏
  • 举报
回复
我们用9.i provider=oraoledb.oracle ADO 2.7 Win2k sp3
没问题阿 我组件配置成com+组件
firmbird 2003-10-21
  • 打赏
  • 举报
回复
再提一把
'=================================================================================
在本论坛中很多帖子是有关asp连接oracle9.2错误帖子,但是没有给出一个具体的解答方案

本人在开发过程中也碰到过相类似的问题,现在终于明白了,

错误信息:

访问vb程序,完全正常

访问WEB出错:

采用:MSDAORA.1 出现如下的错误

系统错误信息:数据库错误:(未找到 Oracle 客户端和网络组件。这些组件是由 Oracle 公司提供的,是 Oracle 7.3.3 版 (或更高) 客户软件安装的一部分。

采用: OraOLEDB.Oracle.1 出现下面的错误。

系统错误信息:数据库错误:(未找到 Oracle 客户端和网络组件。这些组件是由 Oracle 公司提供的,是 Oracle 8i 版 (或更高) 客户软件安装的一部分。
为什么?

这个问题是微软的bug,有些机器可以的,有些机器上不行的。

问题的出处:

http://support.microsoft.com/default.aspx?scid=kb;en-us;320609

http://support.microsoft.com/default.aspx?scid=kb;EN-US;269344

http://support.microsoft.com/default.aspx?scid=kb;zh-cn;320609


原因
当 Microsoft Oracle OLE DB Provider登记事务时,该 Provider 必须访问下列注册表项:
HKLM\SOFTWARE\Microsoft\MSDTC\MTxOCI(Windows 2000 或 Windows XP)

HKLM\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer(Windows NT 4.0)

运行 Web 服务的用户对于这些注册表项没有访问权限,从而对于安装 Oracle 的目录没有足够权限。
解决方案
若要解决此问题,请确保运行该 Web 服务的用户对于这些注册表项具有访问权限并且能够访问安装 Oracle 的


解决方法:

(1) web服务器和数据库服务器在同一台机器上,采用oracle8.15,或0racle.8.17不会出现问题。
(2)
步骤1.
regedt23进入注册表设置权限
HKLM\SOFTWARE\Microsoft\MSDTC\MTxOCI(Windows 2000 或 Windows XP)
添加用户IUSR_Machine(Internet 来宾帐户)和IWAM_Machine(启动 IIS 进程帐户) 设置全部权限。

步骤2. 找到oracle的安装目录d:\oracle\ora92
添加 IUSR_Machine(Internet 来宾帐户)和IWAM_Machine(启动 IIS 进程帐户)
并设置他的访问权限.并运用的下面的所有文件夹及文件。

步骤3.重新启动机器,就ok了。

不过按照上面的做法,采用:Provider=OraOLEDB.Oracle.1; 接口一定没有问题,
但是采用:Provider=MSDAORA.1; 可能会出现错误!
出错信息:dllhost.exe出现错误 或其他错误!

如果web服务器和数据库服务器不同机器上,可以服务器装oracle8.i的客户端,没有问题。装oracle9.i的客户端,解决方法同上面所提示。
flywlsj 2003-10-21
  • 打赏
  • 举报
回复
Try this:
Provider=OraOLEDB.Oracle.1;Password=***;Persist Security Info=True;User ID=user;Data Source=motodb

or

Provider=MSDAORA.1;Password=***;Persist Security Info=True;User ID=user;Data Source=msesfc
sunht 2003-10-21
  • 打赏
  • 举报
回复
ft,没有人告诉,揭贴
firmbird 2003-10-20
  • 打赏
  • 举报
回复
还有可能是权限的问题,好像在ASP中调用Oracle的数据连接就会产生这个问题,你在网上找一下。
firmbird 2003-10-20
  • 打赏
  • 举报
回复
你去Oracle网站上下一个Orale for OLE DB的驱动,估计是你的驱动不行。名称是OraOLEDB_92020.exe,安装一下,再试试看
sunht 2003-10-20
  • 打赏
  • 举报
回复
Onega(),兄弟,关键是在应用程序中没有任何错误,可是在COM组件中就不行啊
sunht 2003-10-20
  • 打赏
  • 举报
回复
权限是怎么回事,能不能说清楚一些呢
Onega 2003-10-19
  • 打赏
  • 举报
回复
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
VOID PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL;
long nCount = 0;
long i = 0;

if( (pConnection->Errors->Count) > 0)
{
nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(i = 0; i < nCount; i++)
{
pErr = pConnection->Errors->GetItem(i);
printf("\n\t Error number: %x\t%s", pErr->Number, (LPCSTR)pErr->Description);
}
}
}
/*
CREATE PROCEDURE "ONEGA"."TestProc1"
(
p_out OUT numeric,
p_id IN numeric DEFAULT 1
)
IS
BEGIN
p_out:= p_id + 1234;

return;
END

;
*/
int main(int argc, char* argv[])
{
printf("Use ADO to open Oracle!\n");
CoInitialize(NULL);
_ConnectionPtr pConn("ADODB.Connection");
try
{
_CommandPtr Cmd1;
Cmd1.CreateInstance( __uuidof( Command ) );
_ParameterPtr outParam=NULL;
_RecordsetPtr pRst("ADODB.Recordset");
pConn->Open("Provider=OraOLEDB.Oracle;Data Source=workdb;User Id=Onega;Password=sa;"
,"","",adConnectUnspecified);
Cmd1->ActiveConnection = pConn;
Cmd1->CommandText = "{call ONEGA.TestProc1( ?)}";
Cmd1->CommandType = adCmdText;
outParam = Cmd1->CreateParameter("p_out",adInteger,adParamOutput,sizeof(int));
Cmd1->Parameters->Append(outParam);
Cmd1->Execute(NULL,NULL,adExecuteNoRecords);
long p2=Cmd1->Parameters->Item["p_out"]->Value;
printf("p2= %d,\n",p2);
pConn->Close();
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\nCOM error occurred, Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
PrintProviderError(pConn);
}
::CoUninitialize();
printf("program end.\n");
return 0;
}
sunht 2003-10-19
  • 打赏
  • 举报
回复
#define ORA_STR "Provider=OraOLEDB.Oracle;Data Source=myoacle;User ID=system;Password=test;Persist Security Info=FALSE"
#define ORA_USER "system"
#define ORA_PASS "test"
STDMETHODIMP Cconora::Auth_Login(BSTR str_pass, BSTR pwd, int *errnum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
_ConnectionPtr conn;
conn.CreateInstance(__uuidof(Connection));
try
{
_bstr_t temp(ORA_STR);
conn->Open(
_bstr_t(temp),
_bstr_t(ORA_USER),_bstr_t(ORA_PASS),
-1);
}
catch(_com_error err)
{
*errnum=2;
CString str;
str.Format("错误信息是%s",err.ErrorMessage());
CLogEvent errlog(str);
errlog.Log();
str.Format("错误描述是%s",(char *)err.Description());
errlog.m_strlog=str;
errlog.Log();
conn.Release();
return S_OK;
}
return S_OK;
}
从net8 配置工具中都测试成功,关键是相同的代码在MFC中能够正常运行,而在这里就异常了

错误信息是UNKNOWN ERROR 0X800A0E7A
错误描述是未找到提供程序。该程序可能未正确安装。
可是我都安装了无数次了,我把ORACLE能够安装的组件都安装了,包括数据库、CLIENT、甚至管理服务器都安装了,MDAC升级到2。8版本,ORACLE的补丁也打上了, 我真是一点办法都没有了,重装系统,只安装WIN2000SERVER,ORACLE、IIS、MADC、ORACLE PATCH、WINSP4竟然也报这个错误,难道从ASP里面就没有办法调吗,可是在别的机器上我都测试通过了,会不会是服务器硬件不兼容呢?
XXandOO 2003-10-18
  • 打赏
  • 举报
回复
说清楚点,数据源配了吗?
sunht 2003-10-18
  • 打赏
  • 举报
回复
UUPP
sunht 2003-10-18
  • 打赏
  • 举报
回复
操作系统windows2000, iis vc6 oracle 版本是9.2.0.1.0

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧