这是我以前写的一个函数,当时我表中的关键字为'RowGuid',你稍改一下即可使用,这个函数的好处是
使你在录入数据时也可以实时的进行判断,这个函数是基于三层的,要注意一下那个GetDataSet,
GetDataSet其实是利用一个公用的ClientDataSet返回一个SELECT语句的结果集....
调用方式如下
KeyFieldCrc([FieldName1,FieldName2..FieldNameN],DataSet,TableName,'XX重复!');
procedure keyFieldCRC(const Fields:array of String; DataSet:TDataSet; TableName,ErrStr:String);
var
i:Integer;
Str:String;
CanNext:Boolean;
procedure ShowErrMsg(Str:String);
begin
Raise EConvertError.Create(Str);
end;
begin
if not DataSet.Active then exit;
for i:=Low(Fields) to High(Fields) do
begin
if Trim(Str)='' then
Str:='('+Fields+'='+''''+DataSet.FieldByName(Fields).AsString+''''+')'
else Str:=Str+' And ('+Fields+'='+''''+DataSet.FieldByName(Fields).AsString+''''+')';
end;
Str:='Select * from '+TableName+' Where ('+Str+') and (RowGuid<>'''+DataSet.FieldByName('RowGuid').AsString+''')';
with GetDataSet(Str) do
begin
CanNext:=IsEmpty;
Free;
end;
if not CanNext then
begin
DataSet.Edit;
DataSet.FieldByName(Fields[0]).FocusControl;
ShowERRMsg(ErrStr);
end;
DataSet.Edit;
end;