ado recordset是不是只能普通select...from语句
我下载了一个别人封装的ado类,其中没有connection.execute,我是不是应该增加这个函数?

解决方案 »

  1.   

    BOOL Execute(_bstr_t CommandText, long Options=adCmdText);
    BOOL CAdoConnection::Execute(_bstr_t CommandText, long Options)
    {
    ASSERT(m_pConnection != NULL);
    _variant_t RecordsAffected; try
    {
    if (m_pConnection == NULL)
    {
    return FALSE;
    }
    m_pConnection->Execute(CommandText, &RecordsAffected, Options);
    return TRUE;
    }
    catch (_com_error e)
    {
    TRACE(_T(":( 执行命令发生异常: %s\n"), e.ErrorMessage());
    return FALSE;
    }}
      

  2.   

    Execute的时候进入catch (_com_error e) 
    哪里错了?
      

  3.   

    strSQL="SELECT * From t_kycl";没有问题
    strSQL="SELECT * INTO [;DataBase=C:\\Documents and Settings\\Fong\\桌面\\信阳样本\\test.mdb].t_kycl FROM t_kycl"出错,是不是因为不能执行SELECT * INTO?
      

  4.   

    你看看异常的内容怎么说明的啊..
    把 e.ErrorMessage()改成e.Description();然后括号中改成如下试试:
    "SELECT * INTO [MS Access;Database=C:\\Documents and Settings\\Fong\\桌面\\信阳样本\\test.mdb].t_kycl FROM t_kycl"
      

  5.   

    这个问题已经找到原因了,是因为目标表已经存在,手动删除之后就没有问题了
    现在有另外一个问题,下面的删除出错:
    strSQL="DROP TABLE t_kycl";
    TRACE("连接状态:%d\n", m_adoConnection.IsOpen());//返回1,正常
    if (m_adoConnection.Execute(strSQL.GetBuffer(50))== FALSE)
    {
         AfxMessageBox("删除t_kycl失败!");
         return;
    }
    错误信息:
    :( 执行命令发生异常: IDispatch error #3092
    语句DROP TABLE t_kycl直接在access中执行没问题VC的ado怎么这么复杂,以前用VB真的很简单
      

  6.   

    这是我的Execute定义
    BOOL Execute(_bstr_t CommandText, long Options=adCmdText);//声明
    BOOL CAdoConnection::Execute(_bstr_t CommandText, long Options)//定义
    {
    ASSERT(m_pConnection != NULL);
    _variant_t RecordsAffected; try
    {
    if (m_pConnection == NULL)
    {
    return FALSE;
    }
    m_pConnection->Execute(CommandText, &RecordsAffected, Options);
    return TRUE;
    }
    catch (_com_error e)
    {
    TRACE(_T(":( 执行命令发生异常: %s,%s\n"), e.ErrorMessage(),e.Description());
    return FALSE;
    }}
      

  7.   

    用try捕获一下异常看看是什么原因..
      

  8.   

    追踪到msado15.tli出错[code=C/C++]inline _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) {
        struct _Recordset * _result;
        HRESULT _hr = raw_Execute(CommandText, RecordsAffected, Options, &_result);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
        return _RecordsetPtr(_result, false);
    }code]
    出错时
    CommandText   {"DROP TABLE t_kycl" (2)}
    RecordsAffected     0x0013f3ec{VT_EMPTY}
    Options     1
      

  9.   

    你adoconnection连接数据库的部分代码帖出来 看看..
      

  10.   

    连接没有问题,状态正常strSQL="DROP TABLE t_kycl";
    TRACE("连接状态:%d\n", m_adoConnection.IsOpen());//返回1,正常
    if (m_adoConnection.Execute(strSQL.GetBuffer(50))== FALSE)
    {
         AfxMessageBox("删除t_kycl失败!");
         return;
    }
      

  11.   

    这重要吗
    if (!m_adoConnection.Connect(LPCSTR(strConnect)))
    {
    AfxMessageBox("数据库连接失败!");
    return;
    }
    strConnect的内容为{"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb"}
      

  12.   

    这是Connect的定义
    BOOL CAdoConnection::Connect(LPCTSTR strConnect, long lOptions)
    {
    ASSERT(m_pConnection != NULL);
    m_strConnect = strConnect;
    try
    {
    // 连接数据库---------------------------------------------
    return SUCCEEDED(m_pConnection->Open(strConnect, "", "", lOptions));
    }
    catch (_com_error e)
    {
    TRACE(_T(":( 连接数据库发生异常: %s\n"), e.ErrorMessage());
    return FALSE;

    catch (...)
    {
    TRACE(_T(":( 连接数据库时发生未知错误:"));
    }
    return FALSE;
    }
      

  13.   

    用try捕获不到异常吗??
    不知道你是怎么做的,我是可以的,下面是我的代码:CoInitialize(NULL);_ConnectionPtr m_pConnection;
    m_pConnection.CreateInstance(__uuidof(Connection));
    try                 
    {
    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data  Source=Demo.mdb","","tyz",adModeUnknown);
    m_pConnection->Execute("drop table test",&RecordsAffected,adCmdText);
    m_pConnection->Close();
    m_pConnection.Release();
    CoUninitialize();
    return 0;
    }
    catch(_com_error e)
    {
    cout<<"数据库连接操作失败!"<<endl;
    cout<<(LPCSTR)e.Description()<<endl;
    return 1;
    }
      

  14.   

    IDispatch error #3092 
    //是没有找到对象错误
    //表不存在?