MS_SQL数据库5个字段pipe,station,comp,rev,curve_type对应一个Curve_ID,一个Curve_ID对应一组数据(也就是一组坐标值),我现在是4个字段pipe,station,comp,curve_type对应多组数据,这些数据的个数我不知道,我想把每组数据都在TCHART上花一条线,我在tchart上加了一些线和点,PLine2,PLine3,PLine4,PLine5......和点 PointsA2, PointsA3, PointsA4.....因为我只会画一条线,所以这里不知道怎么编了。我想一条一条画,但是具体有多少条线我又不知道,循环那里不知道怎么处理,请教高手这里怎么编,能不能帮助下,希望给出代码,谢谢!!!我自己是这么编的,还没编完。
procedure TMainForm.curveClick(Sender: TObject);
var
  a,b,c,e,cmd,count,i:integer;
  Aid:array of integer;
begin
  with datamodule1.adoquery1 do
  begin
    SQL.Clear;
    SQL.Append('select * from  Comp_Pipe_Name where Pipe_Name='''+pipe.text+'''');
    Open;
    a:=fieldbyname('Pipe_ID').asinteger;
    close;    SQL.Clear;
    SQL.Append('select * from  Comp_Station_Name where Station_Name='''+station.text+'''');
    Open;
    b:=fieldbyname('Station_ID').asinteger;
    close;    SQL.Clear;
    SQL.Append('select * from  Comp_Comp_Name where Comp_Name='''+comp.text+'''');
    Open;
    c:=fieldbyname('Comp_ID').asinteger;
    close;    SQL.Clear;
    SQL.Append('select * from  Comp_Curve_Name where Curve_Name='''+curve.items[curve.itemindex]+'''');
    Open;
    e:=fieldbyname('Curve_Type').asinteger;
    close;
    
    sql.Clear;
    sql.Append('select * from Comp_Curve where pipe_id='+inttostr(a)+
      ' and Station_ID='+inttostr(b)+' and Comp_ID='+inttostr(c)+' and curve_type='+inttostr(e));
    open;
    if recordcount>0 then
    begin
      count:=recordcount;
      Aid:= nil;
      SetLength(Aid, count);
      for i:=1 to count do               ----------这里处理的也不一定对
      begin
        Aid[i]:=fieldbyname('Curve_ID').AsInteger;
      end;
      close;
      SQL.Clear;
      sql.append('select * from comp_curve_data where curve_id='+inttostr(aid[1]));
      open;
      First;
      PointsA2.Clear;
      PonitsB2.Clear;
      PLine2.Clear;
      while not eof do
      begin
        PointsA2.AddXY(fieldbyname('point_x').asfloat,fieldbyname('point_y').asfloat);
        Next;
      end;
      PLine2.Clear;
      FitterB.AddPoints(PointsA2);
      FitterB.ReCalculate;
      close;
    end
   XXXXXXXXXXXXXXXXXX-----其他的几条线不知道怎么画了。
    else
      messagebox(0,'对不起,您还没有导入该管存数据,请导入后再查询!','提示',mb_topmost+mb_iconerror);
      exit;
  end;
end;

解决方案 »

  1.   

          for i:=1 to count do              ----------这里处理的也不一定对
          begin
            Aid[i]:=fieldbyname('Curve_ID').AsInteger;
          end; 这个应该是这样的吧
          for i:=1 to count do             
          begin
            Aid[i]:=fieldbyname('Curve_ID').AsInteger;
            next;
          end; 
      

  2.   

    数组没见你用啊只有一个
    inttostr(aid[1])那定义数组干嘛?
      

  3.   

    close;
          SQL.Clear;
          sql.append('select * from comp_curve_data where curve_id='+inttostr(aid[1]));
          open;
          First;
          PointsA2.Clear;
          PonitsB2.Clear;
          PLine2.Clear;
          while not eof do
          begin
            PointsA2.AddXY(fieldbyname('point_x').asfloat,fieldbyname('point_y').asfloat);
            Next;
          end;
          PLine2.Clear;
          FitterB.AddPoints(PointsA2);
          FitterB.ReCalculate;
          close; 这个外面套个循环for i:=1 to count do
    begin

          close;
          SQL.Clear;
          sql.append('select * from comp_curve_data where curve_id='+inttostr(aid[i]));
          open;      First;
          PointsA2.Clear;
          PonitsB2.Clear;
          PLine2.Clear;
          while not eof do
          begin
            PointsA2.AddXY(fieldbyname('point_x').asfloat,fieldbyname('point_y').asfloat);
            Next;
          end;
          PLine2.Clear;
          FitterB.AddPoints(PointsA2);
          FitterB.ReCalculate;
          close; 
    end具体有些东西不知道 是干嘛的 可能位置不对
      

  4.   

    对于Tchart控件,每画一条线,都需要加一个series,还要加point,我用一个数组放ID,每一个ID画一条线,我就写了画一条线的代码,其他线的代码都差不多,只是曲线换一下,而且具体衔接的语句我不是很清楚,就没写出来:
     for i:=1 to count do
          begin
            Aid[i]:=fieldbyname('Curve_ID').AsInteger;
            Next;
          end;        close;
            SQL.Clear;
            sql.append('select * from comp_curve_data where curve_id='+inttostr(aid[1]));
            open;
            First;
            while not eof do
            begin
              PointsA2.AddXY(fieldbyname('point_x').asfloat,fieldbyname('point_y').asfloat);
              Next;
            end;
            PLine2.Clear;
            FitterB.AddPoints(PointsA2);
            FitterB.ReCalculate;
            close;      SQL.Clear;
          sql.append('select * from comp_curve_data where curve_id='+inttostr(aid[2]));
          open;
          First;
          while not eof do
          begin
            PointsA3.AddXY(fieldbyname('point_x').asfloat,fieldbyname('point_y').asfloat);
            Next;
          end;
          PLine3.Clear;
          FitterC.AddPoints(PointsA3);
          FitterC.ReCalculate;
          close;
        end
    上面是画2条线的代码,但是画不出来,弹出错误,'access violation at address 00401FDC in module'如果把画第二跳线的da代码去了,就可以只画出一条线了,关键是其他线怎么画,之间的衔接语句不是很清楚