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;
...全文
609 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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想关联的

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧