代码如下: _CommandPtr m_pCommand;
try{
    m_pCommand.CreateInstance("ADODB.Command");
   }
catch(_com_error &e){
    MessageBox(e.ErrorMessage());
    return;
   }
try{
    m_pCommand->ActiveConnection=m_pConnection;
   }
   catch(_com_error &e){
   MessageBox(e.ErrorMessage());
   return;
   }
CString strSQl;
strSQl ="create or replace directory PATH as ";
strSQl+="\'"+m_nDirectory+"\';";
    //m_nDirectory是用File对话框获得的文件路径
MessageBox(strSQl);
m_pCommand->CommandText=_bstr_t(strSQl);
try{
    m_pCommand->Execute(NULL,NULL,adCmdText);
   }
         catch(_com_error &e){
    MessageBox(e.ErrorMessage());
    return;
   }
每次执行到m_pCommand->Execute(NULL,NULL,adCmdText)这一句时就出错,
最后的MessageBox显示的错误是IDispatch error #3092,怎么办呢?

解决方案 »

  1.   

    用下面的语句看是什么错误catch(_com_error &e)
    {
      AfxMessageBox(e.Description());
      return;
      }
      

  2.   

    不是一个问题啊,上次是在我机子上执行m_pCommand->ActiveConnection=m_pConnection
    时出错,现在我在别人的机子上用,前面都没问题了,可是到了后面的Execute出错。
    郁闷啊!怎么总是有问题呢?
      

  3.   

    AfxMessageBox(e.Description());  可以显示出数据库系统返回的错误提示,你一定要用它看看,能帮你分析出错误。
      

  4.   

    strSQl,sql文本最后不加分号试试,以前我的sql文本没在最后加分号,那个分号应该是在sql工具中表示语句结束的符号,如:oracle 的sqlplus,他实际上是个行编辑器,分号就是语句结束,他把分号前的东东传给 oracle 系统
    strSQl+="\'"+m_nDirectory+"\'";
      

  5.   

    ok了,不要分号就可以了,6x very much!
    我倒是也知道分号只是sql/plus中的结束符,可我以前都是加分号的,没问题啊,而且我这个程序中insert语句中也加了分号,也能执行,真是
    下次所有语句都不加分号了 :(