全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1292
推到 Plurk!
推到 Facebook!

TADOQuery更新資料錯誤?

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-18 21:54:00 IP:61.70.xxx.xxx 未訂閱
請教各位前輩 使用TADOQuery 更新Access資料庫,SQL字串如下: UPDATE PurchaseMaster SET PurchaseMaster.Paid = (SELECT Sum(AccountPayableDetail.Balance) AS Balance之總計 FROM AccountPayableDetail GROUP BY AccountPayableDetail.PurchaseID, AccountPayableDetail.PurchaseType HAVING (((AccountPayableDetail.PurchaseID)=[PurchaseMaster].[PurchaseID]) AND ((AccountPayableDetail.PurchaseType)=[PurchaseMaster].[PurchaseType])) ); 會出現錯誤:[運算式必須使用更新查詢]的訊息,請問那錯了嗎?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-18 21:57:05 IP:203.67.xxx.xxx 未訂閱
引言: 請教各位前輩 使用TADOQuery 更新Access資料庫,SQL字串如下: UPDATE PurchaseMaster SET PurchaseMaster.Paid = (SELECT Sum(AccountPayableDetail.Balance) AS Balance之總計 FROM AccountPayableDetail GROUP BY AccountPayableDetail.PurchaseID, AccountPayableDetail.PurchaseType HAVING (((AccountPayableDetail.PurchaseID)=[PurchaseMaster].[PurchaseID]) AND ((AccountPayableDetail.PurchaseType)=[PurchaseMaster].[PurchaseType])) ); 會出現錯誤:[運算式必須使用更新查詢]的訊息,請問那錯了嗎?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
group by後面出現的欄位,也要出現在update set 後面... 永遠追不上技術更新的速度
------
星期一,二...無窮迴圈@@
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-18 22:19:36 IP:61.70.xxx.xxx 未訂閱
引言: group by後面出現的欄位,也要出現在update set 後面... 永遠追不上技術更新的速度
謝謝pgdennis的回覆,但小弟功力太差還是試不出,請前輩再教導一下 我又有修改為如下,但還是不行?? UPDATE PurchaseMaster SET PurchaseMaster.Paid = (SELECT Sum([Balance]) AS BalanceSum FROM AccountPayableDetail WHERE (((AccountPayableDetail.PurchaseID)=[PurchaseMaster].[PurchaseID]) AND ((AccountPayableDetail.PurchaseType)=[PurchaseMaster].[PurchaseType])); );
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-18 22:22:43 IP:61.70.xxx.xxx 未訂閱
又修改了一下還是不行,如下 UPDATE PurchaseMaster SET PurchaseMaster.Paid = (SELECT Sum([Balance]) AS BalanceSum FROM AccountPayableDetail ); < >< >< >< >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-18 22:24:48 IP:63.84.xxx.xxx 未訂閱
您好!    小弟好像記得在Update...Set語法中, 有用到的資料表名稱都應該出現在Update之后, 如下: UPDATE PurchaseMaster, AccountPayableDetail SET PurchaseMaster.Paid = ......    參考看看!        ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-18 22:28:42 IP:61.70.xxx.xxx 未訂閱
測試一下改為 Select方式,結果可以,如下; SELECT PurchaseMaster.Paid, (SELECT Sum([Balance]) AS BalanceSum FROM AccountPayableDetail ) AS ChileSQL FROM PurchaseMaster;    那是不是 Access的限制,UPDate 不可 Sum 子查詢< >< > 各位前輩救救我吧!!
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-18 22:34:30 IP:61.70.xxx.xxx 未訂閱
引言: 您好! 小弟好像記得在Update...Set語法中, 有用到的資料表名稱都應該出現在Update之后, 如下: UPDATE PurchaseMaster, AccountPayableDetail SET PurchaseMaster.Paid = ...... 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
謝謝前輩回覆,小弟修改為如下,還是一樣的錯誤?? UPDATE PurchaseMaster,AccountPayableDetail SET PurchaseMaster.Paid = (SELECT Sum([Balance]) AS BalanceSum FROM AccountPayableDetail ); < >< >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-18 22:43:14 IP:63.84.xxx.xxx 未訂閱
您好!    UPDATE PurchaseMaster A, AccountPayableDetail B Set A.Paid = (SELECT Sum(B.Balance) AS Balance之總計 From B GROUP BY B.PurchaseID, B.PurchaseType Having (B.PurchaseID=A.PurchaseID And B.PurchaseType=A.PurchaseType))    參考看看!        ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
wuabc
初階會員


發表:6
回覆:60
積分:33
註冊:2002-10-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-18 22:49:43 IP:203.204.xxx.xxx 未訂閱
試試這個
UPDATE PurchaseMaster 
   SET PurchaseMaster.Paid = BalanceSum
FROM
  (SELECT PurchaseID,PurchaseType,Sum(Balance) AS BalanceSum
   FROM AccountPayableDetail
   GROUP BY PurchaseID,PurchaseType) a
WHERE PurchaseMaster.PurchaseID = a.PurchaseID 
  AND PurchaseMaster.PurchaseType =  a.PurchaseType 
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-18 23:29:23 IP:61.70.xxx.xxx 未訂閱
謝謝 cashxin2002 及 wuabc 前輩的回覆 但都還是否行?? 我把資料庫放到MS SQL Server2000 中用以下的sql就可以成功 UPDATE PurchaseMaster SET PurchaseMaster.Paid = (SELECT Sum([Balance]) AS BalanceSum FROM AccountPayableDetail ); 所以我想是Access資料庫不支援吧,真怪??還是語法不同??
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-19 00:20:07 IP:63.84.xxx.xxx 未訂閱
您好!    請用您上述在SQL Server2000中可以正常執行的SQL語法在Access資料庫中再試一下, 如果同樣的語法在Access中無法執行的話, 那應該就是Access資料庫沒有支援這種語法了. (請將原句中的'[]'符號去除); 從您第一篇所貼的語法上來看, Group By語句中用了兩個欄位名, 小弟不知道您要做到的目的為何, 但單單從語法上來看, 使用兩個欄位名做Group By并不是個好的方法, 甚至會影響查詢的效率, 所以是否將您的欄位名解釋和目的貼出來, 再看一下是否有更好的解決方法. 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-19 01:17:41 IP:63.84.xxx.xxx 未訂閱
您好!    小弟剛才試了一下, Access資料庫不支援Update...Set...=(Select Sum(欄位名)...的SQL語法. 所以根据您的需要, 可以考慮先使用Select Sum(欄位名) As 新欄位名 Into 暫存資料表名 From 資料表名來做一個暫存資料表, 再用以上的Update語法配合這個暫存檔來做更新, 完成后再用Drop Table 暫存資料表名將此暫存資料表刪除. 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-05-21 5:15:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!