ClientDataSet运行中出现“ClientDataSet:dataset not in edit or insert mode”(一)
在打开数据表文件,对ClientDataSet执行Append或Insert时,“ClientDataSet:dataset not in edit or insert mode”:
一、搜索问题
1、执行“显示数据后”,再执行Append,出错,说明ClientDataSet处于编辑状态;
2、加入 ClientDataSet1.Active:=True无效;
3、加入 ClientDataSet1.ReadOnly:=False无效;
4、加入下列代码无效:
for i := 0 to ClientDataSet1.FieldCount -1 do
ClientDataSet1.Fields[i].ReadOnly := False;
二、找问题
执行Append末出错,但 向ClientDataSet加入数据出错:
with ClientDataSet1 do
beginClientDataSet1.Append;FieldByName('分支').AsString:=sFCID; // 出错FieldByName('姓名').AsString:='空';ClientDataSet1.Posst;end;
问题是Append,并及时加入一行,录入字符出错。
经过测试
ClientDataSet1.Edit // 处于 dsEdit (此时dsEdit,不能Appen加入)
ClientDataSet1.Append // 处于 dsBrowse
ClientDataSet1.Append // 处于 dsInsert
可见第一次执行Append处于 dsBrowse状态,当然不能录入数据了。再执行一次Append处于 dsInsert状态,才能录入数据。问题就在此处。但根源很难找。
四、解决问题
1、在执行加入代码之前,执行以下代码,让State处于dsEdit,此时可以Append加入了。
with ClientDataSet1 do
beginClientDataSet1.Append;ClientDataSet1.Delete;end;
这个代码一执行,再执行Append,末出现错误。
2、二次执行Append,加入二个空行(数据特),再删除一行之前一行:
with ClientDataSet1 dobeginClientDataSet1.Append;ClientDataSet1.Append;FieldByName('分支').AsString:=sFCID;FieldByName('姓名').AsString:='空';FieldByName('选择').AsString:='True';FieldByName('上传').AsString:='True';FieldByName('考核').AsString:='True';FieldByName('考勤').AsString:='True';FieldByName('进院日期').AsString:=sDate;FieldByName('本市户籍').AsString:='False';FieldByName('雇主保险').AsString:='False';FieldByName('资格补贴').AsString:='False';FieldByName('事业编制').AsString:='False';FieldByName('补贴入职').AsString:='False';FieldByName('员工编号').AsString:='';FieldByName('入职类型').AsString:='退休聘用';FieldByName('工作状态').AsString:='在岗';FieldByName('岗位类型').AsString:='全职';FieldByName('国籍').AsString:='中国';FieldByName('民族').AsString:='汉族';FieldByName('政治面貌').AsString:='群众';FieldByName('文化程度').AsString:='小学及以下';Prior;if FieldByName('姓名').AsString='' then Delete;Next;end;
五、问题的追述
上述情况,问题可能:
(1)使用第三方控件
(2)DBVCL过多,造成不处于sdEdit或sdInsert状态
(3)ClientDataSet自身问题。
继续