我希望从一个表(两个字段,一为旬integer型,一为流量double型)中读取前面36给数据,
然后根据这36个数据计算接下来的36个数据,并存到数据表中,各位大哥哥帮忙看一下:
procedure TForm1.Button2Click(Sender: TObject);
 var
   i:integer;
   str2:string;
begin
   str2:='select * from dj_xun_ybll';
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(str2);
    ADOQuery1.Open;
    setlength(ybll,adoquery1.RecordCount*2);
    for i:=0 to 35 do
     begin
      ybll[i]:=adoquery1.Fields[1].AsFloat;
      ADOQuery1.Next;
     end;
    ADOQuery1.Insert;
    for i:=36 to 71 do
     begin
      ybll[i]:=aver[i-36]+hgxs[i-36]*(ybll[i-36]-aver[i-36]);
      ADOQuery1.FieldByName('xun').AsInteger:=i;
      ADOQuery1.FieldByName('ybll').AsFloat:=ybll[i];
      ADOQuery1.Post;
     end;
end;

解决方案 »

  1.   

    ADOQuery1.Insert;
        for i:=36 to 71 do
         begin
          ybll[i]:=aver[i-36]+hgxs[i-36]*(ybll[i-36]-aver[i-36]);
          ADOQuery1.FieldByName('xun').AsInteger:=i;
          ADOQuery1.FieldByName('ybll').AsFloat:=ybll[i];
          ADOQuery1.Post;
         end;
    改为
        for i:=36 to 71 do
        begin
          ADOQuery1.Insert;
          ybll[i]:=aver[i-36]+hgxs[i-36]*(ybll[i-36]-aver[i-36]);
          ADOQuery1.FieldByName('xun').AsInteger:=i;
          ADOQuery1.FieldByName('ybll').AsFloat:=ybll[i];
          ADOQuery1.Post;
        end;
      

  2.   

    你原来的就插入一条记录,却要post那么多次,估计跟你的逻辑有出入,
    所以改为插入一条就post一条。那么最后数据库中有72条记录!
      

  3.   

    谢谢,依然提示'由于将在索引,主关键字中创建重复的值,请求对表的改变没有成功',怎么回事?对了,如何在delphi中调试程序(象在vc中那样在一个doc屏幕上显示出来?)等待
      

  4.   

    你的用的什么数据库,access吗?
    有自增字段吗?
    如果不是access数据库,有触发器吗?
      

  5.   

    Access数据库,什么叫做自增字段?