我利用Tquery对数据库进行查询,通过DbgridEh进行显示。在程序中有一个修改按钮可以修改显示中的某条记录,然后要更新数据库,同时将修改后的结果显示出来。
部分程序如下:
with fmYJ1.qryGeneral do
begin
 if fmYJ1.qryGeneral.FieldByName('l_date').AsInteger = iDate then
          begin
            sSQL := ' update tbalance a ' +
              'set a.balance = ' + sNewbalance +
              'where a.id = ' + fmYJ1.qryGeneral.fieldByName('ID').AsString +
              'and a.name = ' + fmYJ1.qryGeneral.fieldByName('Name').AsString;
            try
              ExecuteSQL(sSQL);
            except
              on E: Exception do
              begin
                AppMsgDebug(E.Message + sSQL);
                AppMsgWarn('修改当前值出现错误!' + E.Message);
                Exit;
              end;
            end;
          end;
        fmYJ1.qryGeneral.Edit;
        fmYJ1.qryGeneral.fieldByName('balance').AsString := sNewbalance;
        fmYJ1.qryGeneral.post;
end
如上程序是对查询出的某条记录进行修改的。当开始定位到最后一条点击修改,执行到fmYJ1.qryGeneral.fieldByName('balance').AsString := sNewbalance;
就会提示:Dataset not in edit or insert mode!其他记录都可以修改,而且如果再次点击修改,最后一条又可以修改,不会报错。我不知道是什么原因。在我查询统计功能中有一个 while not Eof do的循环,我想是不是那个循环后光标的定位在最后一条记录的下面,所以不能进行编辑。但是将其定位在开始first处,然后点最后一条修改还是报错。郁闷中……不知道有没有人遇见过类似的问题。

解决方案 »

  1.   

    Dataset not in edit or insert mode
    明显是没有进到修改状态对其进行修改
      

  2.   

    Dataset not in edit or insert mode!
    这是问题的所在
    Dataset 不处于编辑或者 插入的状态啊
      

  3.   

    我知道是没有处于编辑状态,可是DbgridEh中那么多记录都可以修改,为什么最后一条不可以?而且第一次定位到最后一条记录进行修改会报那个错,如果定位不变,再点修改又可以修改,而且不报错。我想知道是DBGridEh的问题还是我执行TQuery的问题?初步觉得是while not Eof do循环后指针的定位是不是在最后一条记录的后面,而后面是没有记录的,不可以编辑,所以导致了那个错误。反正我初步接触delphi,以前也没编程经验。一下子也没想明白。