通过ADO连接一Access数据库,
执行一句SQL语句时出错
该语句本身已经过验证,没有问题
可以直接拷贝出来连接该数据库执行
语句中没有包含制表、换行、回车等特殊字符
为什么?

解决方案 »

  1.   

    相关代码为:
    HRESULT hr = S_OK; CDBPropSet propset(DBPROPSET_ROWSET);
    CCommand<CManualAccessor> rs;
    propset.AddProperty(DBPROP_IRowsetChange, true);
    propset.AddProperty(DBPROP_UPDATABILITY,
    DBPROPVAL_UP_INSERT | DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE);
    try{
    hr = rs.Open(m_Session, strSql, &propset, NULL, DBGUID_DBSQL, FALSE);
    if(FAILED(hr))
    {
    throw(1);
    }
    rs.Close();
    return hr;
    }
    catch(...)
    {
    _Module.LogEvent("Couldn't open rowset [%x],[%s]",hr,strSql);
    return hr;
    }
      

  2.   

    从你的出错信息看,关键是你的strSql
      

  3.   

    你的strSql是怎么合成的?
      

  4.   

    但是将生成的strSql原样拷贝出来,
    直接在delphi带的SQLExplorer中连接同一数据库是完全可以成功之行的阿
      

  5.   

    SQL语句与数据库有关。
    只看SQL语句肯定没问题的
    因为在SQL Explorer中该SQL语句运行完全正常
    不过就是一条
    insert into mytable (field1,field2) values (value1,value2)
    所有字符串字段都以半角单引号定界
    没有特殊字符。
      

  6.   

    有一次我在delphi中用SQL语句出错,把这个sql拿到vc中,就没有错误!
    我一直就想不透,后来解决方案,把表和表里的字段名称都改掉,在重写这个
    sql语句,后来一位大虾告诉我说是 delphi 和 vc 对特殊保留字处理的不同!
    哈哈
      

  7.   

    Access数据库这样就不行,最好是
    rs.addnew
    rs(...)=...
    ...
    rs.update
    保证成功
      

  8.   

    查出问题了
    原来是因为有一个字段名为Object不行
    改名后就可以了
    居然在不同的地方SQL语言也会有差异
    我原来一直以为是VC代码的问题