超奇怪问题:数据集append后提示Dataset not in edit or insert mode

星幻子 2012-03-08 09:45:12
超奇怪问题 一直运行很好,后来客户要求添加点新功能,可是新功能与出问题的模块毫无关联

代码片段 如下
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上建立的,都会提示错误
要疯了,还请各位帮忙,在线等!!
...全文
195 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
星幻子 2012-03-08
问题解决了!!!!!

我开发程序时用的是 EhLib 5284
后来重装系统换WIN7 用的是 EHLIB 5.5

哈哈,蛋疼啊!!!!
回复
星幻子 2012-03-08
真他娘奇怪啊!!!!!!!!!!!!!!!!!!!
我特地添加个BUTTON 代码为 DM.ADT_JMoney.Append;

开始一直点 没反应 ,后来发现,当我变换ADT_JMoney的主表的数据有时会出现错误:
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录

出错后再点BUTTON居然有用,而且上面的问题也消失了!!!

顺便说下 这个 ADT_JMoney 是ADOTable,作为一个ADOQuery 的从表
回复
星幻子 2012-03-08
[Quote=引用 10 楼 case5166 的回复:]

引用 9 楼 13001602 的回复:
with do 去掉也不行
State也看了,Append后立马是dsBrowse
那只能断点跟踪了,或许是不是BEFORINSERT之类的东东?

还是QUERY的相关属性设置了ReadOnly之类的,
[/Quote]
呵呵,全部没有~~~
回复
我看见佛 2012-03-08
[Quote=引用 9 楼 13001602 的回复:]
with do 去掉也不行
State也看了,Append后立马是dsBrowse
[/Quote]那只能断点跟踪了,或许是不是BEFORINSERT之类的东东?

还是QUERY的相关属性设置了ReadOnly之类的,
回复
星幻子 2012-03-08
with do 去掉也不行
State也看了,Append后立马是dsBrowse
回复
星幻子 2012-03-08
with do 去掉过了,没用
state 也看了,append后立马就是dsBrowse
回复
星幻子 2012-03-08
他妈的,刚测试下问题消失了一阵子,然后又出现了,见鬼了
回复
我看见佛 2012-03-08
先把WITH DO去掉吧,全部加上完整名称试试,有时WITH DO不注意确实会产生很多奇怪的问题
Append后加上if DM.ADQ_Student.state = dsBrowse then showmessage('看看');
FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
回复
星幻子 2012-03-08
现在修改过功能的模块也出现同样问题了
回复
星幻子 2012-03-08
名称不会错,FieldByName('XSN') 确实是在 DM.ADT_JMoney 下

我用WatchList看了下
FieldByName('XSN').AsString := DM.ADQ_Student.FieldByName('XOLDSN').AsString
的时候 DM.ADT_JMoney.State 为 dsBrowse

问题是我明明APPEND了
最大的问题是以前一直没问题的,突然出现这么个情况
回复
kaikai_kk 2012-03-08
设断点在Append位置,跟踪下去看看是不是有其它的代码,已经把DM.ADT_JMoney的状态(State)改变了
回复
我看见佛 2012-03-08
有点乱乱的,加上完整的名称吧!
回复
我看见佛 2012-03-08
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
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2012-03-08 09:45
社区公告
暂无公告