在你使用Post前加上
if DataSet.State in [dsEidt,esInsert] then
   DataSet.post;
DataSet指你的提供数据源的控件!
                    

解决方案 »

  1.   

    经过反复的调试,发现DBRichEdit构件的OnChange--在窗体显示出来之前触发一次,在首次进入此构件时触发一次。退出时不管是post还是cancel都再触发一次。而如果在其间未对记录进行修改,则dataset.state始终是dsBrowse。
      报错发生在RichEdit构件的OnExit事件之前,因为无法离开此构件,所以OnExit事件根本就不会被触发
      
    关键的地方就是在根本就没有修改RichEdit的时候OnChange事件被触发,而其他的构件不会出现这个问题我在RichEdit的OnEnter事件中加入下面的一行,可以解决此问题:
      if not (Dataset1.State in [dsEdit,dsInsert]) then
        dm1.DSetWJ.Edit;这是不是DBRichEdit的一个bug,欢迎大家继续讨论
      

  2.   

    我一直认为 DBRichEdit 象是一个不完善的第三方控件,
    其实还有一些更奇怪的问题。引用它或许是因为 DBMemo 功能太弱的原因吧。