要想删除表中的某一条记录首先将记录指针移到该记录处然后调用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通过三种不同的途径用来验证用户输入的数据是否有效
这三种途径是基于数据库表的有效性验证基于字段的有效性验证基于记录的有效性验证
[] [] [] []