ClientDataSet运行中出现“ClientDataSet:dataset not in edit or insert mode”(一)

    在打开数据表文件,对ClientDataSet执行Append或Insert时,“ClientDataSet:dataset not in edit or insert mode”:

ClientDataSet运行中出现“ClientDataSet:dataset not in edit or insert mode”(一)_第1张图片

     一、搜索问题

     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
begin
    ClientDataSet1.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
begin
    ClientDataSet1.Append;
    ClientDataSet1.Delete;

end;

   这个代码一执行,再执行Append,末出现错误。

     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过多,造成不处于sdEdit或sdInsert状态

    (3)ClientDataSet自身问题。

      继续

ClientDataSet运行中出现“ClientDataSet:dataset not in edit or insert mode”(二)

你可能感兴趣的:(数据库,DataSnap,编程技巧,数据库,delphi,windows)