使用query的疑问(50分)

  • 主题发起人 主题发起人 foxnt
  • 开始时间 开始时间
F

foxnt

Unregistered / Unconfirmed
GUEST, unregistred user!
用1个QUERY,如何做到添加记录时:
有则修改,无则添加?
我的数据库是SQL SERVER7。有20多个字段。
用动态添加语句太长。我想用参数的方法。
我试过:
if exists(select * from .....)
update ....
else
insert into
但不管如何,每次都是INSERT。不知为何。
请教高手。

 
下面是我的一段代码:
dm.Qexist.Close;
dm.Qexist.ParamByName('pempNo').asstring:=dm.Qclass0.FieldByName('empNo').value;
dm.Qexist.ParamByName('pmonth').asstring:=EGatherMonth.Text;
dm.Qexist.open;
if dm.Qexist.fieldbyname('okok').value=1 then
begin
dm.Qup300.Close;
dm.Qup300.ParamByName('pempNo').asstring:=dm.Qclass0.FieldByName('empNo').value;
dm.Qup300.ParamByName('p300').asfloat:=iTotalHours;
dm.Qup300.ParamByName('pmonthG').asstring:=EGatherMonth.Text;
dm.Qup300.execsql;
end
else
begin
dm.Qins300.Close;
dm.Qins300.ParamByName('pempNo').asstring:=dm.Qclass0.FieldByName('empNo').value;
dm.Qins300.ParamByName('p300').asfloat:=iTotalHours;
dm.Qins300.ParamByName('pmonthG').asstring:=EGatherMonth.Text;
dm.Qins300.execsql;
end;

Qexist:
select count(*) okok
from tempsalary
where empNo=:pempNo
and monthG=:pmonth


 
wumeng:
对不起。我是说:用“一个”QUERY来完成任务!:)
你的方法我知道。我就是嫌他麻烦才来这提问的。
如果我有很多个地方都要这样做的话。会用到非常多
的QUERY。因为每干一次就需要3个QUERY。
有更好的方法吗?
 
设置主键了么?
 
千中元:
你好!
我设置了主键!
 
以前我所理解的概念都错了?
主键的作用是让记录唯一
索引是排序。
你insert的有主见字段么?
 
if exists( select * from class where 主键1=.. and 主键2=... )
update class set status="P" where 主键1=.. and 主键2=...
else
insert into Class values( )

我用SQL6.5,在SQL EX 成功了。
注意条件的大小写。
 
我要一份,<a href="xszeng@188.net">请Mail</a>
 
bitzxs兄,
你要一份什么?
 
千兄:人家大概想要的程序吧。
wumeng:你的方法按常理来说是正确的。
我想知道的是:
你如何判断该SQL是否正确执行?
RowsAffected方法在这里应该如何用?即我如何知道
RowsAffected对应的是UPDATE,还是INSERT?
指教!
 
为何没人回答!!!!!!!!
 
我想你的方法是可以使用的,但是要正确书写,
用DECLEAR @return INTEGER ,
@RETURN=SELECT COUNT(*) FROM TABLE WHERE 。。
IF @RETURN>0 THEN
UPDATE ..
ELSE
INSERT INTO ..
在QUERY中定义一个变量,使用控制流语句.
不信你试一试?
 
假如@return>0
那么在query中,程序如何显示?
if @return > 0 then
......
showmessage('> 0');
中间如何填?
 
不要用showmessage('> 0'),
@定义的变量,只是在SQL中有效,在程序中不起作用的。
不知道你的真正的目的是什么,是要SQL正确执行呢,还是判断SQL执行到哪一步?
如果是前者,我上面的答案应该就可以了!
另外,你可以用SELECT “>0”语句进行打印显示。
 
yanb:您好。
我必须判断SQL执行到哪一步。
现在是UPDATE,还是INSERT。
因为我要在状态条上告诉客户,
他现在的记录是新插入的,还是旧的累加上去的。
 
唉,这个问题虽然简单,
但,还是请大家不要嫌弃为好。
我只是想求一高效点的算法而已。
 
用 BatchMove ,mode 设为 AppendUpdate。
 
》》用 BatchMove ,mode 设为 AppendUpdate。
没看明白。
 
后退
顶部