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

关于 clientdataset/ado 的事件解决办法

2012-07-04 
关于 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

热点排行