SQL與TQuery批次寫入問題~~~~ |
答題得分者是:T.J.B
|
rich777
一般會員 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
請問各位先進高手們....
由於作業上的須將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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |