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;
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;
解决方案 »
- 如何设置软件的分辨率
- DELPHI7任何开发出具有XP风格的窗体
- 【求结程DLL进程的代码,高手进!!!】
- --- 经典问题,请叫高手!!! ---
- 谁能给个InstallShield Developer的下载地址
- 如何读出DBGrid中的数?
- listview的失焦问题。
- 初学delphi 简单问题之五,谢谢大家。
- 在INTERBASE中怎样通过SELECT语句获得当前时间?
- 各位大哥都使用什么报表工具,我不想用quickreport.送分100
- Error:Access violation at address xxxxxxxx. Read of address xxxxxxxx
- 为什么记录的窗口位置,和屏幕实际情况不同?
begin
Aid[i]:=fieldbyname('Curve_ID').AsInteger;
end; 这个应该是这样的吧
for i:=1 to count do
begin
Aid[i]:=fieldbyname('Curve_ID').AsInteger;
next;
end;
inttostr(aid[1])那定义数组干嘛?
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具体有些东西不知道 是干嘛的 可能位置不对
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代码去了,就可以只画出一条线了,关键是其他线怎么画,之间的衔接语句不是很清楚