我在一个表,想如果特殊字段有则只需更新记录,如果没有则插入记录,请问如何用SQL语句实现
我的想法是
if (false==m_DBCnt->Execute(“update....", NULL, adCmdText))
{
          m_DBCnt->Execute(“insert into ....", NULL, adCmdText)
       }我是这样想的,可是我不知道怎么才能知道第一句有没有正确的执行?
请高人帮忙。

解决方案 »

  1.   


    一个笨办法是:先用 SELECT 语句查一下,查到了就更新,没有就插入。
      

  2.   

    第2个属性不要用NULL.传入一人LONG指针.可以用它返回RowEffect.如果是0就说明没有没有更新记录.
      

  3.   

    try
    {
      m_DBCnt->Execute(“update....", NULL, adCmdText)) 
    }
    catch(_comm_error e)
    {
      if(e.wcode == ??) //忘了是多少了,试试就知道了
      {
        m_DBCnt->Execute(“insert into ....", NULL, adCmdText)
      }
    }
      

  4.   

    if (NULL==m_DBCnt->Execute(“update....", NULL, adCmdText)) 

        m_DBCnt->Execute(“insert into ....", NULL, adCmdText) 
    }
      

  5.   


    _variant_t vtEffect;
    m_DBCnt->Execute("update....",&vtEffect,adCmdText);
    if (vtEffect.lval > 0)
        m_DBCnt->Execute("insert into...",NULL,adCmdText);
      

  6.   

    楼上方法可以,或者如下操作:
    try
    {
        m_DBCnt->Execute("insert into...",NULL,adCmdText);
    }
    catch(...)
    {
        m_DBCnt->Execute("update....",NULL,adCmdText);
    }不过感觉不是很严谨..
      

  7.   

    我用VC6.0 连接access数据库时测试发现
    方式一:
    try
    {
        m_DBCnt->Execute("insert into...",NULL,adCmdText);
    }
    catch(...)
    {
        m_DBCnt->Execute("update....",NULL,adCmdText);
    }
    这种方式是不行的。
    方式二:
    if (NULL==m_DBCnt->Execute(“update....", NULL, adCmdText)) 

        m_DBCnt->Execute(“insert into ....", NULL, adCmdText) 
    }
    方式三:
    _variant_t vtEffect;
    m_DBCnt->Execute("update....",&vtEffect,adCmdText);
    if (vtEffect.lval > 0)
        m_DBCnt->Execute("insert into...",NULL,adCmdText);
    这种方法把vtEffect.lval > 0改为vtEffect.lval ==0
    就可以了,谢谢各位。