超奇怪问题 一直运行很好,后来客户要求添加点新功能,可是新功能与出问题的模块毫无关联代码片段 如下
with DM.ADT_JMoney do
begin
  Append;
  if (DM.ADQ_Student.FieldByName('XOLDMARK').AsBoolean)and(N18.Checked) then
    FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
  else
    FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XSN').AsString;当程序运行到两个赋值语句之一时就报错,错误很常见: Dataset not in edit or insert mode我这里用的是SQLServer 2008, 客户用的是 2000,数据库是在2000上建立的,都会提示错误
要疯了,还请各位帮忙,在线等!!

解决方案 »

  1.   

    with DM.ADT_JMoney do
    begin
      Append;
      if (DM.ADQ_Student.FieldByName('XOLDMARK').AsBoolean)and(N18.Checked) then
      FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
      else
      FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XSN').AsString;你这里加了WITH DO如果FieldByName('XSN')在DM下面则正确的,
    若在本窗体内则改成Self.Query.FieldByName('XSN').AsString 
      

  2.   

    设断点在Append位置,跟踪下去看看是不是有其它的代码,已经把DM.ADT_JMoney的状态(State)改变了
      

  3.   

    名称不会错,FieldByName('XSN')  确实是在 DM.ADT_JMoney 下我用WatchList看了下 
    FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
    的时候 DM.ADT_JMoney.State 为 dsBrowse 问题是我明明APPEND了
    最大的问题是以前一直没问题的,突然出现这么个情况
     
      

  4.   

    先把WITH DO去掉吧,全部加上完整名称试试,有时WITH DO不注意确实会产生很多奇怪的问题
    Append后加上if DM.ADQ_Student.state = dsBrowse then showmessage('看看');
    FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
      

  5.   

    with do 去掉过了,没用
    state 也看了,append后立马就是dsBrowse
      

  6.   

    with do 去掉也不行
    State也看了,Append后立马是dsBrowse
      

  7.   

    那只能断点跟踪了,或许是不是BEFORINSERT之类的东东?还是QUERY的相关属性设置了ReadOnly之类的,
      

  8.   

    真他娘奇怪啊!!!!!!!!!!!!!!!!!!!
    我特地添加个BUTTON 代码为  DM.ADT_JMoney.Append;开始一直点 没反应 ,后来发现,当我变换ADT_JMoney的主表的数据有时会出现错误:
    BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录出错后再点BUTTON居然有用,而且上面的问题也消失了!!!顺便说下 这个 ADT_JMoney 是ADOTable,作为一个ADOQuery 的从表 
      

  9.   

    问题解决了!!!!!我开发程序时用的是 EhLib 5284 
    后来重装系统换WIN7 用的是 EHLIB 5.5哈哈,蛋疼啊!!!!