UpdateSQL問題請教 |
答題得分者是:timhuang
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
各位前輩﹒ 小弟在試UpdateSQL的作用時﹐對其的原理有些不理解﹐能否請各位前輩指點迷津﹐小弟先謝謝各位﹒ 先將新增﹑刪除及修改的程式碼存入UpdateSQL中﹐然后利用Query將資料庫中的資料讀出(Test.DBF)﹐那程式中是用何命令來呼叫UpdateSQL中的那三個事先存入的程式碼呢﹖是否如下﹕ procedure TForm1.FormActivate(Sender: TObject);
begin
UpdateSQL1.InsertSQL.Clear; //新增程式碼
UpdateSQL1.InsertSQL.Add('Insert Into Test.Dbf ');
UpdateSQL1.InsertSQL.Add('(Name, Good, Id) ');
UpdateSQL1.InsertSQL.Add('Values ');
UpdateSQL1.InsertSQL.Add('(:Name, :Good, :Id )'); UpdateSQL1.ModifySQL.Clear; //修改程式碼
UpdateSQL1.ModifySQL.Add('Update Test.Dbf ');
UpdateSQL1.ModifySQL.Add('Set ');
UpdateSQL1.ModifySQL.Add('Name = :Name ,');
UpdateSQL1.ModifySQL.Add('Good = :Good ,');
UpdateSQL1.ModifySQL.Add('Id = :Id ');
UpdateSQL1.ModifySQL.Add('Where Id = :Old_Id'); UpdateSQL1.DeleteSQL.Clear; //刪除程式碼
UpdateSQL1.DeleteSQL.Add('Delete From Test.Dbf ');
UpdateSQL1.DeleteSQL.Add('Where Id = :Old_Id');
Query1.CachedUpdates:=True;
Query1.UpdateObject:=UPdateSQL1; Query1.DatabaseName := GetCurrentDir;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From Test.Dbf');
Query1.Close;
Query1.Open;
end; 接著小弟在Form中再加入三個Button元件﹐為別為新增鍵﹑修改鍵及刪除鍵﹒在其OnClick事件中加入如下程式碼﹕(小弟的問題如程式碼中注解) procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Append; //請問此處Append的作用是否就是呼叫
//UpdateSQL.InsertSQL中的SQL新增語法?
Query1Name.Value:='';
Query1Good.Value:=False;
Query1Id.Value:='';
end; procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.Edit; //請問此處Edit的作用是否就是呼叫
//UpdateSQL.InsertSQL中的SQL修改語法?
end; procedure TForm1.Button3Click(Sender: TObject);
begin
Query1.Delete; //請問此處Append的作用是否就是呼叫
//UpdateSQL.InsertSQL中的SQL新增語法? Try
DataBase1.StartTransaction;
Query1.ApplyUpdates;
Query1.CommitUpdates;
DataBase1.Commit;
Except
DataBase1.Rollback;
Query1.CancelUpdates;
ShowMessage('存檔失敗﹗');
end;
end; 以上問題勞煩各位前輩不吝賜教﹒ Delphi新手﹐懇請各位前輩多多指教﹗謝謝您﹗
忻晟
------
忻晟 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
procedure TForm1.Query1UpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
Try
DataBase1.StartTransaction;
UpdateSQL1.ExecSQL(UpdateKind);
Query1.ApplyUpdates;
Query1.CommitUpdates;
DataBase1.Commit;
Except
DataBase1.Rollback;
Query1.CancelUpdates;
ShowMessage('存檔失敗﹗');
end;
end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Query1.Append; //請問此處Append的作用是否就是呼叫
//UpdateSQL.InsertSQL中的SQL新增語法?
Query1.Edit; //請問此處Edit的作用是否就是呼叫
//UpdateSQL.ModifySQL中的SQL修改語法?
Query1.Delete; //請問此處Append的作用是否就是呼叫
//UpdateSQL.DeleteSQL中的SQL刪除語法? 先將你的問題再用紅色的字修改一下
接著回答你的問題, 以上三個問題的答案皆為<>否>.
當你使用了 >>
>>
>>
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
timhuang大大﹒ 非常謝謝您為小弟上了一課﹐您的意思是說Query.Append(Edit, Delete)只是將其放入暫存區內﹐并沒有對資料庫進行修改﹐直到執行ApplyUpdates時才是真正對資料庫的異動進行存檔﹒(前提條件﹕Query1.CachedUpdates:=True) 另外再請教前輩一個問題﹕
DataBase1.StartTransaction;
Query1.ApplyUpdates; //
Query1.CommitUpdates; //
DataBase1.Commit; //
Except
DataBase1.Rollback; //
Query1.CancelUpdates; //
ShowMessage('存檔失敗﹗'); 勞煩前輩將以上程式碼雙斜線行的作用講解一下好嗎﹖小弟有參閱過其它的發表文章﹐但還是有些混淆其中的涵意﹐特別是Query和DataBase之間的一些關系﹒
P.S Table元件可以做交易處理﹐前提條件是不是要使用DataBase元件﹖ Delphi新手﹐懇請各位前輩多多指教﹗謝謝您﹗
忻晟
------
忻晟 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
簡單地說明一下你的問題:
TQuery 中的三個相關 procedure, ApplyUpdates, CommitUpdates, CancelUpdates 的用途, 這三個 procedure 都必須是在 CacheUpdates=true的狀況下才有意義. ApplyUpdates
將異動的資料, 由緩衝區寫入資料庫中 CommitUpdates
將緩衝區的資料清空, 特別注意: 這和 database 的 commit 完全不同哦, commit 的功能是完成 transaction, 而 dataset 的 CommitUpdates 是清空緩衝區 CancelUpdates
將緩衝區的資料清空, 並將異動的資料都還原回異動前的狀態 那麼 database 中的三個和 transaction 有關的 procedure, StartTransaction, Commit, Rollback StartTransaction
對資料庫開始 交易(transaction) 的異動 Commit
對資料庫送出完成 交易(transaction)指令, 將所有異動(insert,delete,update)寫入資料庫中並結束交易. Rollback
對資料庫送出退回 交易(transaction)指令, 將所有異動取消並結束交易 所以正確的使用 BDEDataset 及 Database 的程序如下:
procedure TForm1.ApplyButtonClick(Sender: TObject); begin with CustomerQuery do begin Database1.StartTransaction; try ApplyUpdates; {try to write the updates to the database}; Database1.Commit; {on success, commit the changes}; except Database1.Rollback; {on failure, undo the changes}; raise; {raise the exception to prevent a call to CommitUpdates!} end; CommitUpdates; {on success, clear the cache} end; end; |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |