open的第一个参数即sql语句 若为查询语句 则程序可以
但是如果为插入或建立新表则出错 IDispatch error #3092
我的查询语句在sql plus中完全正确 没有错误
但为什么在ado里就不对了呢
谢谢

解决方案 »

  1.   

    m_pRecordset.CreateInstance(__uuidof(Recordset));
    try
    {
      if ( m_pRecordset->State == adStateOpen) m_pRecordset->Close();
      strAdd = "INSERT INTO RASTER_METADATA (RASTER_FILE_ID) VALUES (57);"
      m_pRecordset->Open(_bstr_t(strAdd),_variant_t((IDispatch *)theApp.m_pConnection.GetInterfacePtr()),adOpenDynamic,adLockOptimistic,adCmdUnknown);
    }
    catch
    {
      ....
    }
      

  2.   

    if ( m_pRecordset->State == adStateOpen) m_pRecordset->Close();
      strAdd = "INSERT INTO RASTER_METADATA (RASTER_FILE_ID) VALUES (57);"
      m_pRecordset->Open(_bstr_t(strAdd),_variant_t((IDispatch *)theApp.m_pConnection.GetInterfacePtr()),adOpenDynamic,adLockOptimistic,adCmdText);
      

  3.   

    adCmdUnknown->adCmdText
    adOpenDynamic->adOpenStatic
      

  4.   

    改了以后提示 表名无效
    奇怪 我select都可以 insert怎么不行?难道要grant权利
    但是sql plus都是可以的啊
      

  5.   

    或者直接
    theApp.m_pConnection.Execute((_bstr_t(strAdd),adExecuteNoRecords)
      

  6.   

    我在sql plus里用scott tiger登陆,然后执行这个insert 是没有问题的
      

  7.   

    theApp.m_pConnection.Execute((_bstr_t(strAdd),NULLadExecuteNoRecords)
    刚才写错了,纠正一下
      

  8.   

    theApp.m_pConnection.Execute((_bstr_t(strAdd),NULL,adExecuteNoRecords)
      

  9.   

    INSERT INTO 用户名.RASTER_METADATA (RASTER_FILE_ID) VALUES (57);