读书人

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

发布时间: 2012-03-16 16:34:56 作者: rapoo

保存时灵异了,大伙帮我看看
问题比较简单,但是我脑袋被门板夹过了,不知道怎么弄了。
界面是一张内存表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;这明显大家能看出来其他的记录也是没有保存到后台的,行不通。脑袋不清醒了,大伙给个意见,这个问题应该很常规呀。我只想不保存一条空的记录,什么方式实现比较好?在线等,不甚感激。。。

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

读书人网 >.NET

热点推荐