dataset not in edit or insert mode用的是ClientDataSet 急!!!!!

cookblack 2009-10-23 12:03:06
代码如下:用的是ClientDataSet 急!!!!!
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
//cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Edit;
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;
//cdsDetail.EnableControls;
end;
end;
...全文
487 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huangheguyun 2009-10-23
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
//cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Append; 先增加。
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;
//cdsDetail.EnableControls;
end;
end;
回复
飞天揽月 2009-10-23
新增是
cdsDetail.Append;
cdsDetail.Post;

修改是
cdsDetail.Edit;
cdsDetail.Post;

回复
火龙岛主 2009-10-23
qryTemp与cdsDetail记录集数匹配吗?
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
//cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Edit;这里应该cdsDetail.Append;吧,没有数据你编辑什么啊?
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;
//cdsDetail.EnableControls;
end;
end;
回复
raize2010 2009-10-23
查出来,在哪里,能怎么解决,小弟也遇到过这样的问题,像楼主那样解决行吗
回复
kaikai_kk 2009-10-23
提示已经很清楚了
记录不在添加或者修改状态,在空记录的情况下,用cdsDetail.Edit也会添加数据成功的

肯定是cdsDetail.Edit或者后面某个赋值语句执行后,
就跳到其它地方执行代码了,这当中有post动作;
再回来继续赋值时,就会出现这个错误了

F7单步运行查查
回复
cookblack 2009-10-23
问题解决了,把代码贴出来。哪里错真的不是很清楚但是这样就解决。
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
cdsDetail.Append;
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.Edit;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;
cdsDetail.EnableControls;
end;
end;
回复
zshsuming 2009-10-23
可能是你的dataset没有和数据库连接成功或者是你操作的表处在只读状态,应该在执行编辑和插入操作之前先修改操作表的属性为可编辑状态。
回复
zshsuming 2009-10-23
你的ClientDataSet连接的什么控件,该控件上面是否有Options属性,下面有关于编辑状态的选项
回复
cookblack 2009-10-23
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
//cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Append;
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
//cdsDetail.Post;
qryTemp.Next;
end;
//cdsDetail.EnableControls;
end;
end;是添加。
回复
iamduo 2009-10-23
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Edit;
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;

循环 Temp,
一直改Detail的当前记录,
……
lz 这个是什么做法?
至少也该有个Locate什么的吧?
回复
cookblack 2009-10-23
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString; 这句后开始,就算你把后面的删掉也是,找不出原因,晕死。
回复
de410 2009-10-23
[Quote=引用 4 楼 cookblack 的回复:]
//cdsDetail.EnableControls;
      end;
  end;这样还是不行,还是那个错误,cdsDetail是从表,我想在主表添加提交后,从表就增加,主从表是通过个id想关联的
[/Quote]
你单步跟踪以下,看看在哪一句出现上述错误~~
回复
cookblack 2009-10-23
SmallHand你好,你说这个是‘qryTemp与cdsDetail记录集数匹配吗? ’什么意思
回复
cookblack 2009-10-23
把cdsDetail.Edit;改成cdsDetail.Append;
回复
cookblack 2009-10-23
if cdsDetail.IsEmpty then
begin
sqlstr:='select QBH,FS,label from P_JndaM';
with qryTemp do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
//cdsDetail.DisableControls;
while ( not qryTemp.Eof) do
begin
//cdsDetail.First;
cdsDetail.Edit;这里应该cdsDetail.Append;吧,没有数据你编辑什么啊?
cdsDetail.FieldByName('QBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr1').AsBoolean:=False;
cdsDetail.FieldByName('KQBH').AsString:=qryTemp.FieldByName('QBH').AsString;
cdsDetail.FieldByName('Statr2').AsBoolean:=False;
cdsDetail.FieldByName('FS').AsString:=qryTemp.FieldByName('FS').AsString;
cdsDetail.FieldByName('label').AsString:=qryTemp.FieldByName('label').AsString;
cdsDetail.Post;
qryTemp.Next;
end;
//cdsDetail.EnableControls;
end;
end;这样还是不行,还是那个错误,cdsDetail是从表,我想在主表添加提交后,从表就增加,主从表是通过个id想关联的
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2009-10-23 12:03
社区公告
暂无公告