在打开数据表文件,对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;
二、找问题
1、执行Append末出错,但 向ClientDataSet加入数据出错:
with ClientDataSet1 do
begin
ClientDataSet1.Append;
FieldByName('分支').AsString:=sFCID; // 出错
FieldByName('姓名').AsString:='空';
ClientDataSet1.Posst;
end;
问题是Append,并及时加入一行,录入字符出错。
2、执行二次Append或Insert,可以不出错 ,但会加入二行数据行。
四、解决问题
1、在执行显示代码最后,加入以下
with ClientDataSet1 do
begin
ClientDataSet1.Append;
ClientDataSet1.Delete;
end;
这个代码一执行,彻底让ClientDataSet处于编辑状态,解决问题。
2、二次执行Append,加入二个空行(数据特),再删除一行之前一行:
with ClientDataSet1 do
begin
ClientDataSet1.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过多,造成不处于Edit状态
(3)ClientDataSet自向问题。