如何判斷數據庫中一個字段的值是否重復?(10分)

  • 主题发起人 joshua_jia
  • 开始时间
J

joshua_jia

Unregistered / Unconfirmed
GUEST, unregistred user!
如何判斷數據庫中一個字段的值是否重復?
向數據庫中寫數據,如果重復就提示,否則增加一條
 
if table1.locate(字段名=:edit1.text) then showmessage('已经存在,请从新输入')
else table1.insert()

 
这是我以前写的一个函数,当时我表中的关键字为'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;
 
顶部