請問DBGrid此感知元件是否設定不作即時更新資料庫動作。 |
尚未結案
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
jeff377
初階會員 發表:9 回覆:60 積分:33 註冊:2004-08-10 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
t0288542您好:
可以采用ADO的BatchUpdate方式,客户端所有的修改数据先暂时储存在客户端的缓存中,而不是立刻更新回数据源中,当客户端决定要把所有的修改更新回数据源时,才做更新。您可在站内查找“BatchUpdate”关键字,有很多相关的咨询。
另可参考:
http://delphi.ktop.com.tw/topic.php?topic_id=70798
http://delphi.ktop.com.tw/topic.php?topic_id=45748
试试看 <>
============================
为什么经过多年以后,得失的过程如此冷漠
============================
>
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi t0288542, 請參考: http://delphi.ktop.com.tw/topic.php?topic_id=30530 更改其 LockType 屬性為 ltBatchOptimistic 即可批次更新,而不會當離開該理資料即更新資料庫 PS:Sorry deity 大大,撞到你了! 發表人 -
------
Fishman |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
謝謝。
因為我目前的動作是輸入一筆按存檔。
如
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(' Insert Into COAMC ');
ADOQuery2.SQL.Add(' (MC001,MC002,MC003,MC004,MC005,MC006,MC007,MC008, ');
ADOQuery2.SQL.Add(' MC009,MC010,MC011,MC012,MC013,MC014,MC015,MC019) ');
ADOQuery2.SQL.Add(' Values ');
ADOQuery2.SQL.Add(' ('''+Trim(DBEdit1.Text)+''','''+Trim(DBEdit2.Text)+''','''+Trim(DBEdit3.Text)+''', ');
ADOQuery2.SQL.Add(' '''+Trim(DBEdit4.Text)+''','''+Trim(DBEdit5.Text)+''','''+Trim(DBEdit6.Text)+''','''+Trim(DBEdit7.Text)+''', ');
ADOQuery2.SQL.Add(' '''+Trim(DBEdit8.Text)+''','''+Trim(DBEdit9.Text)+''','''+Trim(DBEdit10.Text)+''','''+Trim(DBEdit11.Text)+''', ');
ADOQuery2.SQL.Add(' '''+Trim(DBEdit12.Text)+''','''+Trim(DBEdit13.Text)+''','''+Trim(DBEdit14.Text)+''','''+Trim(DBEdit15.Text)+''','''+Trim(DBEdit16.Text)+''') ');
ADOQuery2.ExecSQL;
//ADOQuery1.Post;這是我之前的方法,可是會異動另一個表格
ADOQuery1.UpdateBatch 以上的寫法。好像有點奇怪。
謝謝。
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
t0288542您好:
1、还得注意一个问题就是使用BathUpdate模式,执行的SQL命令必须是Select。
所以您上面直接下insert into,会将異動资料直接写入数据源。
改成如下方式:
procedure TForm1.FormCreate(Sender: TObject); begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select * from COAMC'); ADOQuery2.Open; end; procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery2.insert; ADOQuery2.FieldByName('MC001').AsString:=DBEdit1.Text; ADOQuery2.FieldByName('MC002').AsString:=DBEdit2.Text; ADOQuery2.FieldByName('MC003').AsString:=DBEdit3.Text; …… ADOQuery2.FieldByName('MC019').AsString:=DBEdit19.Text; ADOQuery2.Post; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOQuery2.UpdateBatch(arAll); //更新数据源 //ADOQuery1.CancelBatch(arAll);//取消更新 end;2、更新和新增分开在不同的事件中。另此处的ADOQuery1应为ADOQuery2吧。而下ADOQuery1.post作用是为何?用insert into 的话,直接下ADOQuery2.ExecSQL;就可以了,无须再加ADOQuery2.Post; //ADOQuery1.Post;這是我之前的方法,可是會異動另一個表格 ADOQuery1.UpdateBatch 3、PS:Fishman前辈,您过谦了,您是数据库方面的专家,KTOP之领头羊。小弟有回答错误的地方还请前辈不吝指教,小弟本不该班门弄斧的> <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |