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

SQL與TQuery批次寫入問題~~~~

答題得分者是:T.J.B
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-27 16:33:26 IP:61.59.xxx.xxx 未訂閱
請問各位先進高手們.... 由於作業上的須將A表中的資料COPY至B表... 但如果AB二表有同樣的記錄存在則做更新~~~ 今將A.B二表各以二個不同的TQuery元作做連結... 如果本來在B表已存在的記錄... 那以B.Locate(...)方式可以找到與A表同樣的記錄... 但今若是因A表找不到的記錄而新增至B表的卻無法找到??? B表如下(AB二表是同時開啟的): B01,0 B02,0 B03,0 B04,0 A表如下(AB二表是同時開啟的): B01,10<===loop此筆時可以正確B.Locate並回寫10 B01,20<===loop此筆時可以正確B.Locate並回寫20 B02,30<===loop此筆時可以正確B.Locate並回寫30 A01,40<===loop此筆時由於B.Locate並沒找到所以做APPLEND(但以TDBGrid觀查並沒即時寫至B表吶) A02,50<===loop此筆時由於應在B.Locate時發現因為40那筆資料已APPEND但卻沒有. ****************************************** 因在寫入A表的A02,50時有發生鍵值違規的訊息~~~ 但在A表A01,40時觀查TDBGrid並沒有寫入??? 看來是實際有寫入資料庫了...只是沒立即更新至B.TQuery的元件, 若再重下一次 B.Close; B.SQL.Clear; B.SQL.Add('select * from ....'); B.Open; 即可看到B表因A表而新增的記錄了.... 如此一來不是很沒效率了嗎???每APPEND一筆都要重下SQL指令??? 不知是否有更好的方法解決呢??? 煩請各位前進高手們指導...謝謝< >< >< >< > 約略程式碼如下: //A表=Tab_ApplyOut //B表=Tab_MonthlyCount Tab_MonthlyCount.Close; Tab_MonthlyCount.SQL.Clear; Tab_MonthlyCount.SQL.Add('select * from MONTHLYMAT where YY="' CB_YY.Text '" and MM="' CB_MM.Text '"'); Tab_MonthlyCount.Open; Lab_Run.Caption:='匯入資料:出庫數量'; L := Tab_ApplyOut.RecordCount; if L =0 then L:=1; R := (100/L); S := 0; Gauge1.Progress := 0; Tab_ApplyOut.DisableControls; Tab_ApplyOut.First; while not Tab_ApplyOut.Eof do begin IF R<1 THEN BEGIN S:=S R; if S>1 then begin S:=S-1; Lab_Run.Refresh; Gauge1.Progress:=Gauge1.Progress 1; end; END ELSE BEGIN Lab_Run.Refresh; Gauge1.Progress:=Gauge1.Progress Round(R); END; if not Tab_MonthlyCount.Locate('MAT_NO',Tab_ApplyOut.FieldByName('MAT_NO').AsString,[loCaseInsensitive]) then Tab_MonthlyCount.Append end else Tab_MonthlyCount.Edit; if Tab_MonthlyCount.FieldByName('CLOSEED').AsString<>'Y' then begin Tab_MonthlyCount.FieldByName('YY').AsString := CB_YY.Text; Tab_MonthlyCount.FieldByName('MM').AsString := CB_MM.Text; Tab_MonthlyCount.FieldByName('MAT_NO').AsString := Tab_ApplyOut.FieldByName('MAT_NO').AsString; Tab_MonthlyCount.FieldByName('QTY_OUT').AsFloat := Tab_MonthlyCount.FieldByName('QTY_OUT').AsFloat Tab_ApplyOut.FieldByName('T01').AsFloat; Tab_MonthlyCount.Post; end;
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-27 17:08:00 IP:61.220.xxx.xxx 未訂閱
當你用A表LOOP B表 每Update or Insert一筆Record時 再寫 queryB.close; <---指的是B表的Query queryB.open; <---指的是B表的Query 就可以了 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-05-15 22:22:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!