你可以在DbGrid.datasource.dataset的OnBeforePost事件中写代码来确定是不是重复,这是我的代码:procedure TRolerManagerForm.ADOQuery1BeforePost(DataSet: TDataSet); begin with adoquery2 do begin close; SQL.Clear; SQL.Add('select * from role where ROLEID = '''+dataset.fieldbyname('roleid').asstring+''''); Open; if not eof then begin raise exception.create('该角色编号已经存在,请重新输入!') end; Close; end; end;
你用一个新的clientdataset来从数据库中读出原有的所有数据,
然后一一比较,如有重复就不添加……
begin
with adoquery2 do
begin
close;
SQL.Clear;
SQL.Add('select * from role where ROLEID = '''+dataset.fieldbyname('roleid').asstring+'''');
Open;
if not eof then
begin
raise exception.create('该角色编号已经存在,请重新输入!')
end;
Close;
end;
end;
我想如果记录不是特别多的话,你也可以自己维护一个列表啊。在OnBeforePost中处理也可以的吧。
不过还可以在填入数据的判断
1、利用缓存更新,DBGRID可同时输入多条记录,因此要判断输入时的每条记录不相同。
2、同时要确保输入的每条记录与已输入的记录要相同。
谢谢各位的参与,请大家再想想办法!