程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi數據庫編程新手指南(06)

Delphi數據庫編程新手指南(06)

編輯:Delphi

本章內容為增加、刪除、修改數據庫表中的記錄。

  開發數據庫應用程序的主要目的,就是提供一種修改數據的方法。在第5章,課程展示了如何連接到一個Access數據庫,如何顯示數據庫表中的數據,以及如何遍歷浏覽表中的記錄。

在本章中,將會學習如何增加、刪除和修改數據——通過db-aware/enabled組件對象中的某些屬性、事件和方法。

首先,我們需要創建一個類似於前面章節中所創建的數據窗體。通過使用標准的組件集(DataSource、ADOTable和ADOConnection)來連接到Access數據庫。這一次,我們將探索Authors表。回想一下,Authors表具有三個字段(列):authorName,Email和Web,且都為文本字段。在第一章中,我們已增加了一條“虛擬”記錄。

\

創建一個新的Delphi項目,在默認窗體上放置所有的數據訪問組件以及一個DBGrid和DBNavigator。使用Object Inspector關聯這些組件,並將ADOTable1的TableName指向Authors表——這些實現連接的步驟你應該已經很熟悉了。使用ADOTable的Active屬性在設計時激活連接;或在窗體的OnCreate/ OnClose這對事件句柄中處理,在運行時打開/關閉數據集。

用Delphi開發數據庫應用程序的巨大優勢之一便是TField對象的存在。如前幾章所述,數據庫字段可以是持久性的或是動態創建的。我們建議設置持久性(已知)的數據集字段列表——通過使用Object Inspector將這三個字段添加到列表中。並使用拖放(詳見第5章),將數據感知控件DBEdits連接到數據庫表中的特定字段。

\

Posting

當各組件關聯後,同數據感知組如DBGrid一起使用的DBNavigator,能對表中的記錄進行半自動化的修改、刪除和增加操作。例如,假設你正在使用DBGrid浏覽記錄集,並開始在某些單元格重新鍵入文本(編輯基礎字段的值),這時,該數據還沒有被修改,直到POST方法被調用。(數據集的)Post方法在Delphi數據庫應用程序中起著關鍵作用。

當數據集處於編輯(Edit)狀態時,調用Post會修改當前的記錄。點擊DBNavigator的Post按鈕(面板上的“√”按鈕)時便會調用Post方法。你需要知道,當你移動到下一條記錄時,Post會被隱式的調用——例如在DBGrid中編輯記錄時,按向下(▶)鍵。

應用程序(顯式或隱式)調用Post方法時產生的事件,通過Delphi可以抓取到;例如,(數據集的)BeforePost事件會在記錄“修改”之前觸發。在數據變化發布到數據庫之前,應用程序可以用OnBeforePost來進行有效性檢查。這種基於記錄的驗證,是非常有必要的——尤其對於那些需要判斷輸入值是否有效的字段。同時,可以用字段特有的OnValidate事件來驗證有效性。調用字段編輯器,並選擇相應的字段,在ObjectInspector中即可找到OnValidate。

Editing a record

  為了能夠對數據集返回的數據進行編輯,數據集必須處於編輯狀態。數據感知控件(DBGrid、DBEdit)的AutoEdit屬性默認是為True的,當用戶一開始編輯控件中的值時,數據集狀態就會從“浏覽”變為“編輯”。當我們試圖把一個已處於編輯狀態的數據集置為編輯狀態時,程序不會產生錯誤。

  代碼如下:


[delphi] 
ADOTable1.Edit; //將數據集置於“編輯”狀態  
ADOTable1AuthorName.Value := 'Delphi Guide';    //將字符串‘Delphi Guide’賦值給AuthorName字段  
ADOTable1.Post; //將修改後的數據發布到數據庫; 

ADOTable1.Edit; //將數據集置於“編輯”狀態
ADOTable1AuthorName.Value := 'Delphi Guide'; //將字符串‘Delphi Guide’賦值給AuthorName字段
ADOTable1.Post; //將修改後的數據發布到數據庫;

  一起看看上次調用所觸發的一些事件:

ADOTable1BeforeEdit
  DataSource1StateChange
  DataSource1DataChange
  ADOTable1AfterEdit
  ADOTable1AuthorNameValidate
  ADOTable1AuthorNameChange
  DataSource1DataChange
  DataSource1StateChange
  ADOTable1BeforePost
  DataSource1StateChange
  ADOTable1AfterPost

Adding a new record

  向表中添加一條新記錄最簡單的方法是單擊DBNavigators的“插入(+)”按鈕。調用Insert方法,會在表中添加並打開一個新的記錄——DBGrid首列帶星號標志的空行。其三個DBEdit組件都是空的,以便用戶輸入新的記錄值。

同樣,調用Insert也會觸發一系列的相關事件。

下面為插入並發布新記錄的相關示例代碼:


[delphi]
with ADOTable1 do begin 
 Insert; 
 FieldByName('AuthorName').Value := 'ZarkoGajic'; 
 FieldByName('Email').Value := '[email protected]'; 
 FieldByName('Web').Value:= 'http://sf.hr'; 
 Post; 
end; 

with ADOTable1 do begin
 Insert;
 FieldByName('AuthorName').Value := 'ZarkoGajic';
 FieldByName('Email').Value := '[email protected]';
 FieldByName('Web').Value:= 'http://sf.hr';
 Post;
end;
注: ADOTable組件具有InsertRecord方法,可用於在數據集創建一個新的空記錄,填寫字段的值,並將值發布到數據庫中——所有這些操作只需一行代碼。示例如下:


[delphi] 
ADOTable1.InsertRecord('ZarkoGajic','[email protected]','http://sf.hr'); 

ADOTable1.InsertRecord('ZarkoGajic','[email protected]','http://sf.hr');
"Undo" changes

  在“編輯”(修改數據)或插入狀態(添加一條新紀錄)時,應用程序可以調用Cancel方法。 或點擊DBNavigator上的“×”按鈕。如果在編輯記錄時調用,已連接的數據感知控件復原為原來的值;插入時調用空行會被“刪除”。取消操作會使數據集返回到浏覽狀態。

Deleting a record

  點擊DBNavigator上的“-”按鈕,將調用數據集的Delete方法,調用Delete方法後不需再調用Post。我們可以用BeforeDelete事件來試圖防止用戶從表中刪除記錄;當然,DBNavigator的ConfirmDelete屬性也能防止用戶意外刪除記錄。如果沒有一個已連接到數據集的DBNavigator——也可在DBGrid上按Ctrl+ Delete來調用Delete方法。如果在執行Delete方法時發生錯誤,將會觸發OnDeleteError事件。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved