15.3.4 數據集中的數據維護
數據集中的數據維護主要包括數據記錄的修改,插入和刪除。Delphi為數據集部件提供了相應的方法用於其中的數據維護。這些方法如表15.所示。
表15.3 Delphi用於數據維護的方法
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
方 法 名 功 能
──────────────────────────────
Edit 將數據集置為編輯狀態
──────────────────────────────
Append 投寄所有被修改的記錄,將記錄指針移到表中的最後
一條記錄,且將數據集置為插入狀態
──────────────────────────────
Insert 投寄所有被修改的記錄將數據集置為插入狀態
──────────────────────────────
Post 將插入的新記錄和修改的記錄寫回磁盤上的數據庫表,
即投寄,當投寄成功時數據集回到浏覽狀態,若投寄
不成功數據集仍然保持原有狀態
──────────────────────────────
Cancel 取消當前的操作且將數據集置為浏覽狀態
──────────────────────────────
Delete 刪除當前記錄指針所在的記錄且將數據集置為浏覽狀態
──────────────────────────────
AppendRecord 在表的最後插入一條新記錄,記錄的各個字段值作為
AppendRecord的參數傳遞給新記錄
──────────────────────────────
InsertRecord 在當前指針所在記錄的後面插入一條新記錄, 記錄的
各個字段值作為InsertRecord的參數傳遞給新記錄。
──────────────────────────────
SetRecords 修改當前記錄,字段名和相應的字段值作為SetRecords
的參數
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Edt方法:如果應用程序想對數據集中的數據記錄進行修改,我們必須要將數據集設置成編輯狀態。調用數據集部件的Edit方法便可以將數據集置成編輯狀態,當數據集已經處在編輯狀態時,調用Edit方法不會產生作用。當數據集處於編輯狀態時,移動記錄指針或調用post方法都可以將當前記錄的修改寫回到磁盤數據庫表中。在程序中, Edit方法和post方法常常配合在一起使用,用於修改表中的記錄。如:
Table1.Edit;
Tabel1.FieldByName('CustNo').Asstring := '1234';
Table1.st;
在上述這一段程序代碼中,第一行程序是將Table1置成編輯狀態,第二行程序是對當前記錄指針所在的記錄的CustNo字段的值修改成'1234',第二行程序是調用post方法將對當前記錄的修改寫回數據庫表。
Append方法和Insert 方法:這兩個方法都是將數據集部件置成插入狀態,以在表中插入新記錄,Insert方法是在當前指針位置的記錄後面插入一打新記錄,Append方法是在表的尾部插入一打新記錄,不過這要注意,無論用戶是調用Insert方法還是Append方法插入新記錄,增加記錄到一個具有索引的表中時,都是按照索引順序寫入其位置,也就是說對於索引表格Insert方法和Append方法的作用是一樣的,Append僅適用於沒有索引的表。Insert方法和Append方法實際上是將數據集置成插入狀態,並且插入一條空白記錄,要真正插入一條新記錄,我們必須在調用Insert或Append方法之後,還要給新記錄的各個字段賦值,最後調用post方法,將插入的記錄寫回數據庫表。調用這兩種方法插入新記錄的一般步驟如下:
With tabe1 DO
Begin
Insert; {調用Insert方法,插入一條空記錄}
<為記錄的各字段賦值>
Post;
End;
Post方法:數據集中的記錄被修改或插入新記錄時調用post方法將數據集的修改寫回到數據庫表。根據數據集所處的狀態不同,post方法所產生的作用和效果是不一樣的:
● 當數據集處於編輯狀態時,調用post方法,將當前記錄的修改寫回數據庫表
● 當數據集處於插入狀態時,調用post方法,將插入的新記錄寫回數據庫表
● 當數據集處於SetKey狀態時,調用post方法,將數據集置成浏覽狀態(Browse狀態)
post方法的調用既可以顯式地調用,也可以隱含地調用,當數據集處於編輯狀態或插入狀態時,當移動記錄指針時,Delphi會隱含地調用post方法,將將當前記錄的修改寫回數據庫表,在程序調用Insert方法或Append方法時,也會隱含地調用Post方法,將先前的數據集的修改寫回數據庫表。
Delete方法:Delete方法用於刪除表中的記錄,調用Delete方法時,將會刪除表中當前的記錄,並且自動地將記錄指針移到被刪記錄的下一條記錄,同時將數據集置成Browse狀態。
Cancel方法:Cancel方法用於取消當前的操作,當程序還沒有調用Post方法,將對記錄的修改寫回數據庫表時,調用Cancel方法,可以將記錄恢復到沒有修改之前的狀態。並且在調用Cancel方法時,它總是將數據集置成Browse狀態。
AppendRecord方法和InsertRecord方法:這兩個方法分別與Append方法和Insert方法相似。它們都是用於在表中插入一條新記錄,但AppendRecord方法和InsertRecord方法比Append和Insert方法更簡單更方便一些,它們直接在表中插入一條新記錄,新記錄的各個字段值作為AppendRecord或InsertRecord方法的參數傳遞給新記錄並且不需顯式地調用post方法,將插入的新記錄寫回數據庫表。在給插入的新記錄賦字段值時,將由多個字段值組成的數組作為AppendRecord或InsertRecord的參數,在字段值數組中可以為每一個字段提供一個值,或從左邊一列開始依次為任意多個字段賦值。也就是說,用戶可以從數據庫表的最左一列起,把許多列的值同時傳遞給InsertRecord,直到所有的字段被賦值,用戶也可以省略字段序列後面的的一些字段值,InsertRecord會用空值來填充這些字段:用戶也可以對那些明確希望用空填充的字段傳遞保留字NIl。
例如:如果表Country有Name,Captial,Continent,Area和Population字段,並且數據集部件Table1與它相連,下面的代碼便可以在Country表中當前記錄的後面插入一條新記錄。
Table1.InsertRecord (["中國","北京","五洲"]);
在上述代碼中沒有為Area和population字段賦值,InsertRecord會用空值來填這兩個字段。