我在DBGRID中编辑数据,如果输入重复的商品编号就报错误
   PS := DataSource1.DataSet;
   if (DBGrid1.SelectedField.FieldName = 'goodsNO') then
   begin
     for i:=0 to PS.RecordCount - 1 do
     begin
        if (DBGrid1.SelectedField.AsString = PS.FieldByName('goodsNO').AsString) then
        begin
            ShowMessage('商品编号重复!请重新输入或修改该商品数量');
            DBGrid1.SelectedIndex := 0;
            exit;
        end;
        PS.Next;
     end;为什么PS.RecordCount 在录入第一条数据时是1,而录入第二条记录时第一次循环是1,第二趟循环就变为2了。好象是我刚刚录入数据的原因,能告诉我怎样实现我的功能吗
既在DBGrid中输入数据进行编辑,如果数据重复就出错误!我想查找要比异常更省资源吧

解决方案 »

  1.   

    这种办法不好。或是用while 循环
    商品编号可以程序自动给,不让重复。
      

  2.   

    我明白你的意思你的意思你再DBGRID中修改或添加的数据不是每完成一条就POST,而是
    一起POST,
    那你可以这样试试:
    var
      s;string;
    begin
       PS := DataSource1.DataSet
       s:=PS.FieldByName('goodsNO').AsString;
       if (DBGrid1.SelectedField.FieldName = 'goodsNO') then
       begin
         if ps.RecordCount>1 then//如果新添加一条记录,就不用比较,如果要与数据库已存在数据进行比较,则另外处理   
         begin
         first;
         for i:=0 to PS.RecordCount - 2 do
         begin
            if PS.FieldByName('goodsNO').AsString= s then
            begin
                ShowMessage('商品编号重复!请重新输入或修改该商品数量');
                DBGrid1.SelectedIndex := 0;
                exit;
            end;
            PS.Next;
         end;
         end;
       end;
    end;以上未经测试
      

  3.   

    我明白你的意思你的意思你再DBGRID中修改或添加的数据不是每完成一条就POST,而是
    一起POST,
    那你可以这样试试:
    var
      s;string;
    begin
       PS := DataSource1.DataSet
       s:=PS.FieldByName('goodsNO').AsString;
       if (DBGrid1.SelectedField.FieldName = 'goodsNO') then
       begin
         if ps.RecordCount>1 then//如果新添加一条记录,就不用比较,如果要与数据库已存在数据进行比较,则另外处理   
         begin
         first;
         for i:=0 to PS.RecordCount - 2 do
         begin
            if PS.FieldByName('goodsNO').AsString= s then
            begin
                ShowMessage('商品编号重复!请重新输入或修改该商品数量');
                DBGrid1.SelectedIndex := 0;
                exit;
            end;
            PS.Next;
         end;
       end;
    end;以上未经测试