我利用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处,然后点最后一条修改还是报错。郁闷中……不知道有没有人遇见过类似的问题。
部分程序如下:
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处,然后点最后一条修改还是报错。郁闷中……不知道有没有人遇见过类似的问题。
明显是没有进到修改状态对其进行修改
这是问题的所在
Dataset 不处于编辑或者 插入的状态啊