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

UpdateSQL問題請教

答題得分者是:timhuang
cashxin2002
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-30 12:43:28 IP:63.84.xxx.xxx 未訂閱
各位前輩﹒ 小弟在試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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-30 12:56:17 IP:211.20.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-30 13:12:53 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-30 14:27:12 IP:63.84.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-30 21:54:50 IP:61.221.xxx.xxx 未訂閱
簡單地說明一下你的問題: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-02 08:56:56 IP:63.84.xxx.xxx 未訂閱
謝謝TimHuang前輩的指點﹗小弟了解了﹒﹒﹒ 加油努力中﹒﹒﹒ Delphi新手﹐懇請各位前輩多多指教﹗謝謝您﹗ 忻晟
------
忻晟
系統時間:2024-05-12 23:41:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!