一段代码,请大家看看:
procedure TForm8.FormShow(Sender: TObject);
var
id,id1:integer;
laiyuan:string;
begin
with query1 do
begin
sql.Text:='select * from fanying.db';
open;if recordcount<>0 then
  for id:=1 to recordcount do
 begin
 if fieldbyname('New').AsBoolean=true then
  begin
   if form8.Table1.RecordCount=0 then
   form8.Table1.Append
   else
   form8.Table1.Insert;
   form8.Table1.Post;
   form8.Table1.Edit;
   form8.table1.FieldByName('序号').AsInteger:=id;
   form8.Table1.Edit;
   form8.Table1.FieldByName('来源').AsString:=fieldbyname('来源').AsString;
   fieldbyname('New').AsBoolean:=false;
   for id1:=id+1 to recordcount do
      with form8 do
      begin
      table1.Next;
      laiyuan:=table1.fieldbyname('来源').AsString;
      table1.Edit;
      table1.FieldByName('序号').AsInteger:=id1;
      table1.Edit;
      table1.FieldByName('来源').AsString:=laiyuan;
      end;
  end;
  next;
end;
end;
end;这个程序的功能是通过去query组件从一个表中读入数据,通过判断字段new来知道是不是一个新纪录,是的话,在这个form8窗体里面添加记录,然后把相应的来源,以及序号赋给form8的table1的相应字段,但是程序运行就是出现这个错误,请大家帮忙看看啊!!

解决方案 »

  1.   

    form8.Table1.Insert;
       //form8.Table1.Post;
       //form8.Table1.Edit;
       form8.table1.FieldByName('序号').AsInteger:=id;
       //form8.Table1.Edit;
       form8.Table1.FieldByName('来源').AsString:=fieldbyname('来源').AsString;
       fieldbyname('New').AsBoolean:=false;
       for id1:=id+1 to recordcount do
          with form8 do
          begin
          table1.Next;
          laiyuan:=table1.fieldbyname('来源').AsString;
          //table1.Edit;
          table1.FieldByName('序号').AsInteger:=id1;
          //table1.Edit;
          table1.FieldByName('来源').AsString:=laiyuan;
          end;
      

  2.   

    前加edit;
    fieldbyname('New').AsBoolean:=false;
      

  3.   

    to  linzhisong(無聊) 
    你的这个方法是对的啊,前面我没有看清,漏加了个什么edit啊,但是现在又有新的错误了啊,就是报什么不可以对制度表格进行读写操作的啊,但是我的那个什么fanying.db是可以读写的啊
      

  4.   

    一段代码,请大家看看:
    procedure TForm8.FormShow(Sender: TObject);
    var
    id,id1:integer;
    laiyuan:string;
    begin
    with query1 do
    begin
    sql.Text:='select * from fanying.db';
    open;if recordcount<>0 then
      for id:=1 to recordcount do
     begin
     if fieldbyname('New').AsBoolean=true then
      begin
       if form8.Table1.RecordCount=0 then
       form8.Table1.Append //??
       else
       form8.Table1.Insert;//??  Append,Insert有区别吗?
       form8.Table1.Post;//??此时存盘,没有赋值呀?
       form8.Table1.Edit;
       form8.table1.FieldByName('序号').AsInteger:=id;
    //??没有提交编辑的数据,修改可能无效!
       form8.Table1.Edit;//标记2
       form8.Table1.FieldByName('来源').AsString:=fieldbyname('来源').AsString;
       fieldbyname('New').AsBoolean:=false;
       for id1:=id+1 to recordcount do
          with form8 do
          begin
          table1.Next;//这句话把标记2处的编辑状态变在非编辑状态!之前没有POST语句,修改也没存盘.
          laiyuan:=table1.fieldbyname('来源').AsString;
          table1.Edit;
          table1.FieldByName('序号').AsInteger:=id1;
          table1.Edit;//上面少了行table1.Post;下面也一样!
          table1.FieldByName('来源').AsString:=laiyuan;
          end;
      end;
      next;
    end;
    end;
    end;总之这是一个不能用的代码,问题不是一个,而是一堆,好好看看书!
      

  5.   

    多谢: madyak(无天) 
    那么有耐心啊,帮我看代码啊
      

  6.   

    query1.RequestLive:=true;代码确实很乱!
      

  7.   

    为什么要这样做呢RequestLive属性很不好用的,有缓冲不久简单了嘛
      

  8.   

    真的找不到原因,这个问题我也遇到,一直用的好好的函数突然出现dataset not in insert 
    or edit mode.
      

  9.   

    我又不知道,query控件有这个属性的啊,我还不知道,原来query控件返回的数据集本来都是只读属性的,而需要通过设置requestlive属性为true,才可以是它变成可读写的啊!!