要实现一个判断添加的一个字段docid和表中的字段docid的值重复问题,重复了,提示重复,就不要添加。
但是我这样子写了,有信息提示,但是还是可以添加进去
因为都是dbedit控件和每个字段关联了。数据集控件用adodataset,请问大家,在哪里判断写错了呢?procedure TForm1.btn2Click(Sender: TObject);
var
i :Integer;
aa,bb,cc :string;
begin
aa :=Trim(dbedtDocID.Text);
with qry2 do
begin
Close;
SQL.Clear;
sql.Add('select docid from login ' );
Open;
end;
qry2.First;
for i:=1 to qry2.RecordCount -1 do
begin
bb :=Trim(qry2.fieldbyname('docid').AsString);
if bb=aa then
begin
ShowMessage('docid 数据重复,不能添加,请修改');
exit;
end
else
begin
qry1.edit;
qry1.Post;
end ;
qry2.Next;
end;
但是我这样子写了,有信息提示,但是还是可以添加进去
因为都是dbedit控件和每个字段关联了。数据集控件用adodataset,请问大家,在哪里判断写错了呢?procedure TForm1.btn2Click(Sender: TObject);
var
i :Integer;
aa,bb,cc :string;
begin
aa :=Trim(dbedtDocID.Text);
with qry2 do
begin
Close;
SQL.Clear;
sql.Add('select docid from login ' );
Open;
end;
qry2.First;
for i:=1 to qry2.RecordCount -1 do
begin
bb :=Trim(qry2.fieldbyname('docid').AsString);
if bb=aa then
begin
ShowMessage('docid 数据重复,不能添加,请修改');
exit;
end
else
begin
qry1.edit;
qry1.Post;
end ;
qry2.Next;
end;
begin
if qry1.state= dsinsert then
qry1.Cancel;
ShowMessage('docid 数据重复,不能添加,请修改');
end;
1:关系型数据库设唯一字段2:qry1.beforepost事件里,判断是否重复 如果重复则撤销。 这样的话可以控制全局
procedure TCustomQueryForm. qry1BeforePost(DataSet: TDataSet);
var
AStr:string;
begin
inherited;
AStr := qry1.fieldbyname('docid').AsString;
AStr := 'select docid from login where docid='+quotedstr(AStr); qry2.close;
qry2.sql.text := AStr;
qry2.open; if qry2.recordcount > 0 then
begin
qry1.state= dsinsert then
qry1.abort;
ShowMessage('docid 数据重复,不能添加,请修改');
end;
end;
var
AStr:string;
begin
AStr := qry1.fieldbyname('docid').AsString;
AStr := 'select docid from login where docid='+quotedstr(AStr); qry2.close;
qry2.sql.text := AStr;
qry2.open; if qry2.recordcount > 0 then
begin
qry1.abort;
ShowMessage('docid 数据重复,不能添加,请修改');
end;
end;