如何用SQL语句实现,如果关键字存在则更新记录,如果不存在就插入一条记录?

wflishh 2008-04-21 05:21:38
我在一个表,想如果特殊字段有则只需更新记录,如果没有则插入记录,请问如何用SQL语句实现
我的想法是
if (false==m_DBCnt->Execute(“update....", NULL, adCmdText))
{
m_DBCnt->Execute(“insert into ....", NULL, adCmdText)
}

我是这样想的,可是我不知道怎么才能知道第一句有没有正确的执行?
请高人帮忙。
...全文
918 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
接分先!
wflishh 2008-04-28
  • 打赏
  • 举报
回复
我用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
就可以了,

谢谢各位。。。。
tianloveyou 2008-04-22
  • 打赏
  • 举报
回复
if (NULL==m_DBCnt->Execute(“update....", NULL, adCmdText))
{
m_DBCnt->Execute(“insert into ....", NULL, adCmdText)
}
wflishh 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lfchen 的回复:]
C/C++ codetry{
m_DBCnt->Execute(“update....", NULL, adCmdText))}catch(_comm_error e)
{if(e.wcode==??)//忘了是多少了,试试就知道了{
m_DBCnt->Execute(“insert into ....", NULL, adCmdText)}
}
[/Quote]
这种方法是不行的,不管成不成功都不会发生异常
wflishh 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 marine8086 的回复:]
第2个属性不要用NULL.传入一人LONG指针.

可以用它返回RowEffect.如果是0就说明没有没有更新记录.
[/Quote]
此方法实验不成功,不知道应该传那一个变量的指针过去。在网上找了半天也没有找到相关的。
内存泄漏 2008-04-22
  • 打赏
  • 举报
回复
楼上方法可以,或者如下操作:
try
{
m_DBCnt->Execute("insert into...",NULL,adCmdText);
}
catch(...)
{
m_DBCnt->Execute("update....",NULL,adCmdText);
}

不过感觉不是很严谨..
marine8086 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wflishh 的回复:]
引用 2 楼 marine8086 的回复:
第2个属性不要用NULL.传入一人LONG指针.

可以用它返回RowEffect.如果是0就说明没有没有更新记录.

此方法实验不成功,不知道应该传那一个变量的指针过去。在网上找了半天也没有找到相关的。
[/Quote]

_variant_t vtEffect;
m_DBCnt->Execute("update....",&vtEffect,adCmdText);
if (vtEffect.lval > 0)
m_DBCnt->Execute("insert into...",NULL,adCmdText);
一条晚起的虫 2008-04-21
  • 打赏
  • 举报
回复
try
{
m_DBCnt->Execute(“update....", NULL, adCmdText))
}
catch(_comm_error e)
{
if(e.wcode == ??) //忘了是多少了,试试就知道了
{
m_DBCnt->Execute(“insert into ....", NULL, adCmdText)
}
}
marine8086 2008-04-21
  • 打赏
  • 举报
回复
第2个属性不要用NULL.传入一人LONG指针.

可以用它返回RowEffect.如果是0就说明没有没有更新记录.
zaodt 2008-04-21
  • 打赏
  • 举报
回复

一个笨办法是:

先用 SELECT 语句查一下,查到了就更新,没有就插入。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧