_CommandPtr m_pCommand;
//执行储存过程
CString cvar1=strHPHM,cvar2=strHPZL,cvar3=strZXSJ,cvar4=m_path;
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->Parameters->Refresh();

m_pCommand->ActiveConnection=db.GetActiveConnection();
m_pCommand->CommandType=adCmdStoredProc;
m_pCommand->CommandText=_bstr_t("getftppath");

_variant_t vvar1,vvar2,vvar3,vvar4;vvar1=_variant_t(_bstr_t(cvar1));
vvar2=_variant_t(_bstr_t(cvar2));
vvar3=_variant_t(cvar3);
vvar4=_variant_t(cvar4);_ParameterPtr mp_var1,mp_var2,mp_var3,mp_var4;

mp_var1.CreateInstance(__uuidof(Parameter));
mp_var2.CreateInstance(__uuidof(Parameter));
mp_var3.CreateInstance(__uuidof(Parameter));
mp_var4.CreateInstance(__uuidof(Parameter));

mp_var1=m_pCommand->CreateParameter
(
_bstr_t("HPHM"),
adVarChar,
adParamInput,
sizeof(char)*1024,
vvar1
);
m_pCommand->Parameters->Append(mp_var1); 
mp_var2=m_pCommand->CreateParameter
(
_bstr_t("HPZL"),
adVarChar,
adParamInput,
sizeof(char)*1024,
vvar2
);
m_pCommand->Parameters->Append(mp_var2); 

mp_var3=m_pCommand->CreateParameter
(
_bstr_t("ZXSJ"),
adVarChar,
adParamInput,
sizeof(char)*1024,
vvar3
);
m_pCommand->Parameters->Append(mp_var3); 

mp_var4=m_pCommand->CreateParameter
(
_bstr_t("FTPH"),
adVarChar,
adParamOutput,
sizeof(char)*1024,
vvar4
);
m_pCommand->Parameters->Append(mp_var4);                    try
                  {   
  m_pCommand->Execute(NULL,NULL,adCmdStoredProc);

}
                  catch   (_com_error   e)   
{   
AfxMessageBox(e.Description());
return   ;   
}  
m_pCommand->Parameters->GetItem("FTPH")->GetValue();当我执行上面的代码时,发生错误,原文如下:数据记录集错误
代码=80040e14
代码含义=IDispatch error #3092
源=Microoft OLE DB Provider for Oracle
描述=ORA-06550:line 1,column 7:
PLS_00201:identifier 'GETFTPPATH' must be declared
ORA_06550:line 1,column 7:
PL/SQL:Statement ignored请高手指点一下。是什么原因。不够,还可以加分!

解决方案 »

  1.   

    getftppath 是你存储过程的名称嘛?确定没有写错且连的是正确的数据库?从报的错误信息来看。是没找到对应的存储过程。
      

  2.   

    getftppath不存在,一是打错或未打全名字,二是你连错库了,这个getftppath不在当前库中。再者就是你那个getftppath是有owner的,你要以owner的帐号进行登录。才能作为owner访问到这个名称。
      

  3.   

    调存储过程直接用ConnectPtr的Execute方法就可以,查询分析器里面能执行的语句放这儿也可以执行
      

  4.   

    对,先放到PL SQL下运行,通过再放在这里
      

  5.   

    getftppath ,检查这个存储过程是否存在或者连接的数据库是否一致
      

  6.   

    感谢二位指点:119365374(砖头)、TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669) !
    问题已解决!
    原来是连接数据库的用户名没有权限调用这个存储过程。