首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于 clientdataset/ado 的事件解决方案

2013-01-01 
关于 clientdataset/ado 的事件在 BeforePost 是检查 数据集中(未保存到数据库)性别为‘男’的数量大于10的

关于 clientdataset/ado 的事件
在 BeforePost 是检查 数据集中(未保存到数据库)性别为‘男’的数量  大于10的时候 提示 不能增加
代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
  cdsmx.BeforePost:=BeforePost;
end;

procedure TForm1.BeforePost(DataSet: TDataSet);
var
  aEn:TDataSetNotifyEvent;
begin
  cdsMx.BeforePost:=nil;
  CheckNum;
  cdsmx.BeforePost:=BeforePost;
end;

function TForm1.CheckNum: string;
var
  cds1:TClientDataSet;
begin
  cds1:=TClientDataSet.Create(nil);
  try
    cds1.Data:=cdsMx.Data;

    cds1.Filtered:=False;
    cds1.Filter:='PersonSex = '+QuotedStr('男')';
    cds1.Filtered:=True;
    if cds1.RecordCount>Count then
    begin
      Showmessage('***');
      cdsMx.Cancel;
      Abort;
    end;

  finally
    FreeAndNil(cds1);
  end;
end;

 问题:数据会多生成一行
比如:编号   姓名  性别  爱好
       01    XX     女    XX
 
 提交后  变成俩行

   这是什么原因!!  还有更简单的方法吗?
[解决办法]
猜测可能是在过滤时,就已经保存了一次,而且当前还有一条记录在修改,最后保存时,就成了两条。这是我的猜想,不一定对。
在我之前写程序时,通常都是从数据库里再查一次,判断一下。
[解决办法]
应该是先出发了ado的beforepost,然后你有调用了 TForm1.BeforePost

热点排行