procedure TForm1.Timer1Timer(Sender: TObject);
var
va:integer;
k:integer;
begin
  va:=1000;
    if i mod 10 =0 then
    begin
      adotable1.active:=true;//打开表,记录指针定位到表的第一条记录
      for k:=1 to 10 do//在表的末尾添加10条记录,只有“时间”字段有内容
        begin
        adotable1.append;
        adotable1.FieldByName('时间').AsInteger := i+k;
        adotable1.post;
        adotable1.next;//语句多余,因为当时已经是定位到最后一条记录了,还Next?
        end;
        adotable1.MoveBy(-10);//记录指针指向前面添加的10条记录的前一条,如果有的话,否则指向10条中的第一条
        adotable1.FieldByName('数值').AsInteger := random(va);//将MoveBy语句定位的记录的“数值”字段的值修改,只修改一条记录!!!
        i:=i+1;
      end;
    if i mod 10 <>0 then
      begin
        adotable1.FieldByName('数值').AsInteger := random(va);//如果i mod 10 <>0,表打开了吗?将当前记录(此时哪条是当前记录???)的“数值”字段值修改。
        i:=i+1;
      end;
    end;      

解决方案 »

  1.   

    本人的编程思想是这样:因为每次都要记录10个“时间”字段再去记录“数值”记录,所以要判断该记录是否是十的倍数,假若是,将以下的“时间”记录添加十个,然后返回这十个记录的第一个并记录一个时间记录,这样,再发生一个时间事件后指针指到下一个记录时记录数不是十的倍数,于是它执行只记录一个“数值”字段,这样到记录数是十的倍数时周而复始地执行。
      本人现在将adotable1.next删除,以及改了adotable1.moveby(-9),程序是:procedure TForm1.Timer1Timer(Sender: TObject);
    var
    va:integer;
    k:integer;
    begin
      va:=1000;
         adotable1.active:=true;
        if i mod 10 =0 then
        begin
        for k:=1 to 10 do
            begin
             adotable1.append;
             adotable1.FieldByName('时间').AsInteger := i+k;
             adotable1.post;
             end;
             adotable1.MoveBy(-9);
             adotable1.FieldByName('数值').AsInteger := random(va);
             i:=i+1;
           end;
         if i mod 10 <>0 then
          begin
             adotable1.FieldByName('数值').AsInteger := random(va);
             i:=i+1;
           end;不知为什么它总显示“dataset not in edit or insert mode”错误信息,麻烦各位再指点。
      

  2.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    va:integer;
    k:integer;
    begin
      va:=1000;
        adotable1.active:=true;
        if i mod 10 =0 then
        begin
        for k:=1 to 10 do
            begin
            adotable1.append;
            adotable1.FieldByName('时间').AsInteger := i+k;
            adotable1.post;
            end;
            adotable1.MoveBy(-9);
            adotable1.edit;//使刚才添加的10条记录的第一条处于编辑状态
            adotable1.FieldByName('数值').AsInteger := random(va);
            adotable1.post;//更新
            i:=i+1;
          end;
        if i mod 10 <>0 then
          begin
            adotable1.append;//i mod 10<>0 也应该加一条记录吧
            adotable1.FieldByName('数值').AsInteger := random(va);
            adotable1.post;
            i:=i+1;
          end;
            
      

  3.   

    不是很明白需求,找我的理解改了一下,对付着看吧
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      va:integer;
      k:integer;
    begin
      va:=1000;
      adotable1.active:=true;
      if i mod 10 =0 then
      begin
        for k:=1 to 10 do
        begin
          adotable1.append;
          adotable1.FieldByName('时间').AsInteger := i+k;
          adotable1.post;
        end;
        adotable1.MoveBy(-9);
      end;
      adotable1.edit;//使刚才添加的10条记录的第一条处于编辑状态
      adotable1.FieldByName('数值').AsInteger := random(va);
      adotable1.post;//更新
      adotable1.next;
      i:=i+1;
    end;
      

  4.   

    不行吧,i mod 10 <>0还是要添加一条记录的。
      

  5.   

    程序中这段
    for k:=1 to 10 do
            begin
            adotable1.append;
            adotable1.FieldByName('时间').AsInteger := i+k;
            adotable1.post;
            adotable1.next;
            end;
            adotable1.MoveBy(-10);  //你能保证此时记录指针前一定肯10个记录了吗
            adotable1.FieldByName('数值').AsInteger := random(va);
            i:=i+1;
          end;
    I是一全程变量吧?
      

  6.   

    我已有一个MDB数据库,已透过ADO与DELPHI程序联接上了,我想做的是先记录十个“时间”记录后,返回之前再记录十个“数值”记录,我将程序变为如下,并用一个DBgrid监测数据表,发现表格只是记满10个“时间”后停止并出现错误信息,麻烦各位再指教,(i是全程变量),假若问题解决,小弟一定痛哭流涕,不胜感激.procedure TForm1.Timer1Timer(Sender: TObject);
    var
    va:integer;
    k:integer;
    begin
      va:=1000;
         adotable1.active:=true;
      for k:=1 to 10 do
            begin
             adotable1.append;
             adotable1.FieldByName('时间').AsInteger := i+k;
             adotable1.post;
             adotable1.next;
             end;
             adotable1.MoveBy(-10);
             for  k:=1 to 10 do
             begin
               adotable1.Edit ;
               adotable1.FieldByName('数值').AsInteger := random(va);
               adotable1.Post ;
               adotable1.next;
               i:=i+1;
           end;end;
      

  7.   

    我在本机调试通过:
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    va:integer;
    k:integer;
    begin
      va:=1000;  if i mod 10 =0 then
      begin
      adotable1.active:=true;
      timer1.Enabled:=false;
      randomize;
      for k:=1 to 10 do
            begin
            adotable1.append;
            adotable1.FieldByName('时间').AsInteger :=i+k;
            adotable1.post;
           // adotable1.next;
            end;
            adotable1.MoveBy(-9);
            for  k:=1 to 10 do
            begin
              adotable1.Edit ;
              adotable1.FieldByName('数值').AsInteger := random(va);
              adotable1.Post ;
              adotable1.next;
              inc(i);
          end;
        timer1.Enabled:=true;
      end;end;