请教各位:
Dbgrid作为输入控件时,控制不能输入重复的行,特别是主键字段不能重复。

解决方案 »

  1.   

    如果是三层结构的话,
    你用一个新的clientdataset来从数据库中读出原有的所有数据,
    然后一一比较,如有重复就不添加……
      

  2.   

    你可以在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;
      

  3.   

    迟了。嘿嘿。
    我想如果记录不是特别多的话,你也可以自己维护一个列表啊。在OnBeforePost中处理也可以的吧。
      

  4.   

    对!!在OnBeforePost事件中写代码
    不过还可以在填入数据的判断
      

  5.   

    有两个地方需要判断:
    1、利用缓存更新,DBGRID可同时输入多条记录,因此要判断输入时的每条记录不相同。
    2、同时要确保输入的每条记录与已输入的记录要相同。
     谢谢各位的参与,请大家再想想办法!