5,939
社区成员
发帖
与我相关
我的任务
分享

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, TeEngine, Series, ExtCtrls, TeeProcs, Chart, DbChart,
StdCtrls;
type
TMains = class(TForm)
DBChart1: TDBChart;
ADOConnection1: TADOConnection;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
//在这里定义数据集对象
qrytmp:TAdoQuery;
qrytmpg:Array of TADOQuery; //改为动态数组,这个数组需要是全局的,以便在正确的位置释放
public
{ Public declarations }
end;
var
Mains: TMains;
implementation
{$R *.dfm}
procedure TMains.Button1Click(Sender: TObject);
var
DataSetIdx,i:Integer;
sqlstr:string;
myseries:TLineSeries;
begin
if Not Assigned(qrytmp) then //判断对象qrytmp是否已创建,如果没有创建,则创建实例
begin
qrytmp:=TADOQuery.Create(self);
qryTmp.Connection:=mains.ADOConnection1;
end;
sqlstr:='select distinct typea from GTest';
qrytmp.Close;
qrytmp.SQL.Clear;
qrytmp.sql.Add(sqlstr);
try
qrytmp.Open;
except
showmessage('处理数据出现错误');
exit;
end;
while not qrytmp.Eof do
begin
//调整动态数组个数
if qrytmp.RecNo>Length(qrytmpg) then
begin
DataSetIdx:=Length(qrytmpg);
SetLength(qrytmpg,DataSetIdx+1);
end
else
begin
DataSetIdx:=qrytmp.RecNo-1;
end;
//判断本数据集对象是否创建
if Not Assigned(qrytmpg[DataSetIdx]) then //判断对象qrytmp是否已创建,如果没有创建,则创建实例
begin
qrytmpg[DataSetIdx]:=TADOQuery.Create(self);
qrytmpg[DataSetIdx].Connection:=mains.ADOConnection1;
end;
sqlstr:='select * from GTest where typea like '''+trim(qrytmp.fieldbyname('Typea').AsString)+''' order by daya';
qrytmpg[DataSetIdx].Close;
qrytmpg[DataSetIdx].SQL.Clear;
qrytmpg[DataSetIdx].SQL.Add(sqlstr);
qrytmpg[DataSetIdx].Open;
if qrytmpg[DataSetIdx].RecordCount>0 then
begin
myseries:=TLineSeries.Create(self);
DBChart1.AddSeries(myseries); //将这行语句放在这里
myseries.DataSource:=qrytmpg[DataSetIdx];
myseries.XLabelsSource:='daya';
myseries.XValues.ValueSource:='daya';
myseries.YValues.ValueSource:='ssa';
myseries.CheckDataSource;
myseries.Repaint;
//DBChart1.AddSeries(myseries); //这行语句需要移动到上面
end;
qrytmp.Next;
end;
DBChart1.Refresh;
end;
procedure TMains.FormDestroy(Sender: TObject);
var
i:Integer;
begin
qrytmp.Close;
qrytmp.Free;
for i:=0 to Length(qrytmpg)-1 do
begin
qrytmpg[i].Close;
qrytmpg[i].Free;
end;
end;
end.
var
qrytmp:TAdoQuery;
qrytmpg:Array of TADOQuery; //改为动态数组,这个数组需要是全局的,以便在正确的位置释放
DataSetLen:Integer;
sqlstr:string;
myseries:TLineSeries;
begin
qrytmp:=TAdoQuery.Create(self);
qrytmp.Connection:=mains.ADOConnection1;
//qrytmpg:=TAdoQuery.Create(self);
//qrytmpg.Connection:=mains.ADOConnection1;
sqlstr:='select distinct typea from GTest';
qrytmp.Close;
qrytmp.SQL.Clear;
qrytmp.sql.Add(sqlstr);
try
qrytmp.Open;
except
showmessage('处理数据出现错误');
exit;
end;
while not qrytmp.Eof do
begin
sqlstr:='select * from GTest where typea like '''+trim(qrytmp.fieldbyname('Typea').AsString)+''' order by daya';
DataSetLen:=Length(qrytmpg);
Setlength(qrytmpg,DataSetLen+1);
qrytmpg[DataSetLen]:=TAdoQuery.Create(self); //在这里创建曲线数据集对象
qrytmpg[DataSetLen].Connection:=mains.ADOConnection1; //
qrytmpg[DataSetLen].Close;
qrytmpg[DataSetLen].SQL.Clear;
qrytmpg[DataSetLen].SQL.Add(sqlstr);
qrytmpg[DataSetLen].Open;
if qrytmpg[DataSetLen].RecordCount>0 then
begin
myseries:=TLineSeries.Create(self);
DBChart1.AddSeries(myseries); //将这行语句放在这里
myseries.DataSource:=qrytmpg[DataSetLen];
myseries.XLabelsSource:='daya';
myseries.XValues.ValueSource:='daya';
myseries.YValues.ValueSource:='ssa';
myseries.CheckDataSource;
myseries.Repaint;
//DBChart1.AddSeries(myseries); //这行语句需要移动到上面
end;
qrytmp.Next;
end;
DBChart1.Refresh;