有了TDBNavigator正確連接,并且沒有在代碼中OnClick的事件,它正在按照預期。我理解問題的地方是當我在事件中放入代碼時:
nbInsert: INSERT 會完成還是必須通過代碼來完成?nbPost: 我必須通過代碼來完成還是無論如何都完成了帖子?
發布完成后,記錄將上升到下一個記錄 - 是嗎?
uj5u.com熱心網友回復:
根據以下檔案Vcl.DBCtrls.TDBNavigator.OnClick:
在執行操作后單擊資料庫導航器上的按鈕時發生。
使用OnClick事件處理程式撰寫回應單擊事件的代碼。因為導航器上的按鈕已經具有單擊它們時發生的默認操作,所以沒有必要撰寫OnClick事件處理程式。
注意:OnClick事件發生在單擊按鈕的默認操作之后。
所以:不,你不需要自己做任何動作。或者更準確地說:為時已晚。
根據使用“發布”的導航按鈕的檔案并不意味著任何記錄轉移。
uj5u.com熱心網友回復:
另一個答案中參考的檔案是正確的,但沒有提供有關 DBNavigator 如何作業的任何見解。DBNavigator 操作僅反映 TDataSet 的默認操作。
每當 TDataSet 準備執行導航操作(即移動跟蹤活動記錄的邏輯游標)時,它就會呼叫其 CheckBrowseMode 方法
procedure TDataSet.CheckBrowseMode;
begin
CheckActive;
DataEvent(deCheckBrowseMode, 0);
case State of
dsEdit, dsInsert:
begin
UpdateRecord;
if Modified then Post else Cancel;
end;
dsSetKey:
Post;
end;
end;
撇開 dsSetKey 狀態不談,這僅在資料集的狀態為 dsEdit 或 dsInsert 時才起作用。如果是,它會呼叫 UpdateRecord 將已對資料集欄位所做的任何更改寫回資料集的活動緩沖區。
如果,但僅當呼叫 UpdateRecord 導致設定資料集的 Modified 標志時,CheckBrowseMode 呼叫其 Post 方法,否則呼叫 Cancel 放棄任何更改。將 Modified 設定為 true 的唯一方法是通過 TDataLink 后代的操作將資料集的欄位連接到資料庫感知控制元件,例如 TDBEdits。
重要的是要了解,是對 Post 的呼叫保存了任何更改,并且無論是什么觸發了對 CheckBrowseMode 的呼叫,都會發生這種情況。一個這樣的觸發器,但只有一個,是 dBNavigator 的導航按鈕之一,nbFirst、nbPrior、nbNext、nbLast,被點擊。
CheckBrowseMode 的操作也解釋了如果您單擊 nbInsert 后緊跟 nbFirst、nbPrior、nbNext 或 nbLast 會發生什么情況,即默認情況下,“插入”的記錄被放棄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/350891.html
標籤:德尔福
下一篇:為什么FileAge回傳意外值?
