要想刪除表中的某一條記錄首先將記錄指針移到該記錄處然後調用delete方法這樣當前指針所在的記錄就會被刪除而且我們在進行刪除操作時不必將TTable部件設置成編輯狀態當前指針所在的記錄被刪除之後被刪除記錄下面的所有記錄都向前移動記錄指針自動移到緊挨著被刪除的記錄的下一條記錄在刪除記錄的過程中沒有提醒用戶是否真的想刪除當前記錄的信息確認框因此在進行此項操作時要倍加小心如果是開發應用程序最好的辦法是提供一個確認信息框確保用戶不會意外刪除記錄
插入一條記錄也很簡單Delphi為用戶提供兩種方法用來插入記錄到現存數據庫表中一種方法是在當前記錄指針所在的記錄處插入記錄另一種方法是在數據庫表的尾部插入記錄這兩種方法是分別調用Insert方法和Append方法實現的但是無論是調用Insert方法還是調用Append方法在具有索引的數據庫表中插入記錄增加到索引表中的記錄都將按照索引順序寫入到數據庫表中也就是說對於索引表調用Insert和Append方法的效果是一樣的事實上Append方法只適用於那些沒有索引的表這種沒有索引的表並不十分有用因而通常不創建這種表幾乎任何情況下我們都是用Insert方法來插入記錄
用戶在插入記錄時一般可以采用兩種方式插入逐步插入即首先建立一條空記錄然後再填充記錄的各個字段最後再將記錄寫回到磁盤共分三個獨立的操作步驟而使用InsertRecord方法便可以一次將插入記錄的操作完成
逐步插入方法
逐步插入方法分為三個明確的步驟先調用TTable部件的Insert方法在TTable中創建一條新的空記錄然後填充該記錄的各個字段最後調用post方法把新記錄寫到磁盤上的實際數據庫文件中在填充並傳送記錄以前考慮插入記錄到表中的什麼位置是毫無意義的假設插入的表是有索引的在調用post方法時Delphi會自動地把插入的新記錄按照索引順序插入到表中的正確位置如果插入的表中沒有索引那麼新記錄將插入到當前指針所在記錄的後面
因此采用逐步插入方法插入記錄的程序代碼一般如下形式
With Table do
begin
Insert; {插入一條空白記錄}
<填充該記錄的各個字段>
post; {將插入的記錄寫回到磁盤文件}
end;
對於沒有索引的數據庫表可以用Append方法替代Insert方法把新記錄插入到表的尾部
調用InsertRecord插入記錄
對於簡單的應用程序Delphi允許用戶用一條語句插入一個新記錄而且這個新記錄可以帶有任意多個新字段值InsertRecord方法把新記錄中字段的賦值語句和psot方法調用組合進一條語句中
InsertRecord方法把記錄的各個字段值組合成一個字段值數組作為它的唯一參數在字段值數組中可以為插入的記錄的每個字段提供一個字段值或從最左一列開始依次為任意多個字段賦值也就是說用戶可以從表的最左邊一列起 把多個列的值同時傳遞給InsertRecord直到所有字段都被賦值用戶也可以省略後面的字段InsertRecord會用空值填充這些沒有賦值的字段用戶還可以對那些明確希望用空值填充的字段傳遞保留字NIL來標明該字段為空
如我們希望在CustomerDB表中插入一條記錄可以用下面的代碼來實現
InsertRecord([NILNILNIL])
在上面的程序代碼中我們只填充了四個字段CustNoCompanyAdd Add InsertRecord會自動將其它字段賦以空值
例 在這個例子中我們在CustNoDB表中插入和刪除記錄都是在程序中完成這類操作的而不再是使用DBD或數據浏覽部件完成
插入/刪除記錄
unit tt;
interface
uses
SysUtils Windows Messages Classes Graphics Controls
StdCtrls Forms DBCtrls DB DBGrids Buttons DBTables Grids
ExtCtrlsMaskDialogs;
type
TForm = class(TForm)
DBGrid: TDBGrid;
DBNavigator: TDBNavigator;
Panel: TPanel;
DataSource: TDataSource;
Panel: TPanel;
customerTable: TTable;
BitBtn: TBitBtn;
Label: TLabel;
Label: TLabel;
BitBtn: TBitBtn;
BitBtn: TBitBtn;
CustNoEdit: TEdit;
CompEdit: TEdit;
procedure FormCreate(Sender: TObject)
procedure BitBtnClick(Sender: TObject)
procedure BitBtnClick(Sender: TObject)
procedure FormActivate(Sender: TObject)
private
{ private declarations }
public
{ public declarations }
end;
var
Form: TForm;
implementation
{$R *DFM}
procedure TFormFormCreate(Sender: TObject)
begin
customerTableOpen;
end;
procedure TFormBitBtnClick(Sender: TObject)
begin
If (Length(CustNoEdittext)=)and
(Length(CompEdittext)=)
then
MessageDlg(沒有輸入新記錄的字段值!mtError[mbCancel])
else
with customerTable do
begin
IndexFieldNames:=CustNo;
If FindKey([CustNoEdittext]) then
MessageDlg(已經存在這條記錄!mtError[mbCancel])
else
InsertRecord([StrToInt(CustNoEdittext)CompEdittextnil])
CustNoEdittext:= ;
CompEdittext:= ;
end;
end;
procedure TFormBitBtnClick(Sender: TObject)
begin
If (Length(CustNoEdittext)=)and
(Length(CompEdittext)=)
then
MessageDlg(沒有輸入刪除的記錄的字段值!mtError[mbCancel])
else
with customerTable do
begin
IndexFieldNames:=CustNo;
If FindKey([CustNoEdittext]) then
begin
If MessageDlg(你確定要刪除這條記錄嗎?mtConfirmation
[mbYesmbno])=mrYes then Delete;
end
else
MessageDlg(沒有你要刪除的記錄!mtError[mbCancel])
CustNoEdittext:= ;
CompEdittext:= ;
end;
end;
procedure TFormFormActivate(Sender: TObject)
begin
CustNoEditsetfocus;
end;
end
輸入數據的有效性驗證
當用戶向一個數據庫表中插入新記錄或修改原有記錄時我們必須確保用戶輸入的數據是有效的為此Delphi通過三種不同的途徑用來驗證用戶輸入的數據是否有效
這三種途徑是基於數據庫表的有效性驗證基於字段的有效性驗證基於記錄的有效性驗證
[] [] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25165.html