保存时灵异了,大伙帮小弟我看看

保存时灵异了,大伙帮我看看
问题比较简单,但是我脑袋被门板夹过了,不知道怎么弄了。
界面是一张内存表TMemTableEh,连一个DataSource,下带一个Dbgrid,然后一个新增和保存按钮,表字段3个String类型。
这时我点击新增,在dbgrid中输入输入一条后回车,点击保存。因为光标在第二行,我一般会对此行保存一下,这时
会保存一条空的记录。大家看我的代码

Delphi(Pascal) code

//这是保存时调用的函数
function Tfrmabc.DoSave: Integer;
begin
  if BzWorkStatus=wsBrowse then  //BzWorkStatus即为内存表的状态
  begin
    ShowMessage('浏览状态无法保存记录!');
    exit;
  end;
  SetBzWorkStatus; //此事件判断一下如果状态为dsEdit或dsInsert时,保存最后一条记录
          {代码大致为 if (Components[i] as TMemTableEh).State in [dsEdit, dsInsert] then
          (Components[i] as TMemTableEh).Post;}
  //后面就是一个检查字段不能为空,否则退出
  sResult := CheckFieldValidity(cftNull,dataset,字段1,字段2,字段3);
  if sResult<>'' then
  begin
    BzMessageBox('提示:','['+sResult+'] 不得为空!',DM_INFO);
    exit;
  end; 
  //最后就是一个xml的提交到后台数据库保存的过程 protocol事件
  //代码略。。。
  Protocol;  


代码基本上是这样,我输入一行后回车,dbgrid光标会跳到第二行,这时我保存时SetBzWorkStatus事件就保存了,这时会将第二行一个空记录保存到内存表中,后面做检查时,当然是通不过的。这时我准备在BeforePost事件做,判断如果是一条空记录就DateSet.cancel;这时顺利保存了,但是灵异事件是前台dbgrid居然显示有两条同样的记录,我到数据库看了一下,确实只保存了一条记录。这是什么情况?前台的第二天记录还能编辑。。我晕倒了。在BeforePost中加入一个abort;这明显大家能看出来其他的记录也是没有保存到后台的,行不通。脑袋不清醒了,大伙给个意见,这个问题应该很常规呀。我只想不保存一条空的记录,什么方式实现比较好?在线等,不甚感激。。。

------解决方案--------------------
感觉还是数据刷新的问题。内存表中的数据没有和服务器的数据同步。
浏览可用内存表,如果是编辑尽量不要用内存表,很麻烦的。