線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:699
推到 Plurk!
推到 Facebook!

SQL数据库怎么这么怪的,好多代码不能正常运行

答題得分者是:Fishman
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-24 17:43:01 IP:222.184.xxx.xxx 未訂閱
 
代码如下:
  GetSerialNoSuccessful := False;
         TryCount := 0;
         while (not GetSerialNoSuccessful) and (TryCount<10) do
         begin
         datamoduleform.ADOConnection1.BeginTrans;
         try
         ADOQuery6.Close;
         ADOQuery6.SQL.Clear;
          ADOQuery6.SQL.Add('update tb_yp set');
          ADOQuery6.SQL.Add(' tb_yp.库存数量=tb_yp.库存数量-#yhtemp.数量 ');
          ADOQuery6.SQL.Add(' from tb_yp,#yhtemp ');
           ADOQuery6.SQL.Add(' where tb_yp.id=#yhtemp.id');
           ADOQuery6.ExecSQL;
          datamoduleform.ADOConnection1.CommitTrans;
         GetSerialNoSuccessful := True;
         except
        datamoduleform.ADOConnection1.RollBackTrans;
        inc(TryCount);
        Sleep(50);
  end;
   end;
问题:当#YHTEMP表中有两个不同的记录时,所谓不同,也就是说ID不一样,两个记录的数量都能正常减掉,当表中两个记录相同时,它只减一个记录的数量了,第二个就不减了,但以前在ACCESS中是没这种错误产生的。按我上面的代码上的操作,理论上应该不管我这个表中有多少个相同的记录,就是有一百个相同的记录,那么这一百个记录中的ID都会和 TB_YP库中的一个ID相同,那么就会减一百个记录的数量的。
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-25 08:14:02 IP:222.184.xxx.xxx 未訂閱
我再用图来表示一下我的问题的意思:
 表1(tb_yp)         表2(#yptemp)
ID  数量            ID   数量
1   10              1     2
2   20              2     2
执行结果,表一中的数量一栏可以变成8和18 (正确减了数字)
但如果是另一种情况(ID相同时)
表1(tb_yp)         表2(#yptemp)
ID  数量            ID   数量
1   10              2     2
2   20              2     2 
如果是这样时,表一中的数量就变成了18,但应该是要变成16的 。     
發表人 - ntjrr 於 2005/08/25 16:34:39
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 21:39:20 IP:222.184.xxx.xxx 未訂閱
这是原来的ACCESS数据库中的代码,运行完全正常,没有上述错误,哪位前辈帮我把这段代码改到SQL 中使用,谢谢
 
ADOQuery6.Close;
         ADOQuery6.SQL.Clear;
          ADOQuery6.SQL.Add('update tb_yp,tb_temp set');
          ADOQuery6.SQL.Add(' tb_yp.库存数量=tb_yp.库存数量-tb_temp.数量 ');
           ADOQuery6.SQL.Add(' where tb_yp.id=tb_temp.id');
           ADOQuery6.ExecSQL;
           
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-26 12:10:27 IP:222.184.xxx.xxx 未訂閱
哪位前辈能指点一下,不一定就要指点成功,可以发表一下您的看法,您认为这些代码没哪里有错也可以说一下,这样可增强我的信心,我再从其它方面找错。或者猜测一下哪一方面可能会有错。
------
我的编程起步于ktop,我将永远支持ktop
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-26 12:48:07 IP:210.65.xxx.xxx 未訂閱
Hi ntjrr,
試試這樣寫:    update  tb_yp 
set     tb_yp.qty = tb_yp.qty - isnull((select sum(tb_temp.qty) from tb_temp where tb_temp.id = tb_yp.id),0)
where   tb_yp.id in (select distinct id from tb_temp)    或是這樣寫:    update  tb_yp 
set     tb_yp.qty = tb_yp.qty - t2.qty
from    (select id,sum(qty)as qty from tb_temp group by id) t2
where   tb_yp.id = t2.id
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-06-25 14:14:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!