数据表GTest
typea daya ssa
---------------------------------
101 1 0.20
101 2 0.60
101 3 0.63
101 4 0.89
101 5 0.71
102 1 0.36
102 3 1.00
102 4 0.96
102 5 0.56用如下程序DBCHART没有生成曲线,请教各位,如何处理?谢谢
我用的是delphi7+TeeChar7var
qrytmp,qrytmpg:TAdoQuery;
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';
qrytmpg.Close;
qrytmpg.SQL.Clear;
qrytmpg.SQL.Add(sqlstr);
qrytmpg.Open;
if qrytmpg.RecordCount>0 then
begin
myseries:=TLineSeries.Create(self);
myseries.DataSource:=qrytmpg;
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;
typea daya ssa
---------------------------------
101 1 0.20
101 2 0.60
101 3 0.63
101 4 0.89
101 5 0.71
102 1 0.36
102 3 1.00
102 4 0.96
102 5 0.56用如下程序DBCHART没有生成曲线,请教各位,如何处理?谢谢
我用的是delphi7+TeeChar7var
qrytmp,qrytmpg:TAdoQuery;
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';
qrytmpg.Close;
qrytmpg.SQL.Clear;
qrytmpg.SQL.Add(sqlstr);
qrytmpg.Open;
if qrytmpg.RecordCount>0 then
begin
myseries:=TLineSeries.Create(self);
myseries.DataSource:=qrytmpg;
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;
解决方案 »
- WebService 超时
- 不知道怎么问,复合控件的问题,大家往里看,应该不难
- 使用reportmachine3.0打印空报表会报错,有办法解决吗
- 关于toolBar的奇怪问题,请大家帮忙解决。
- 急,我想知道别的程序的运行,如何办啊,
- 我想学习基于Linux的网络编程,请问如何准备和规划?
- 来真的,再问一次,在Delphi中怎样生成Excel文件,并且操作Excel文件?各位多谢!
- 关于报表,紧急!!今天项目经理就要结果,一定送分100!!!
- delphi源码中有BUG,高手请进
- 关于MTS/COM+编程中的问题
- 50跪求 Delphi7 ADO升级补丁
- Delphi中菜单快捷键如何实现A代替ALT+A
另外你的代码问题很大,在 while循环中又对qrytmp进行重新的sql打开,没出问题,算你幸运
当然,如果不绑定数据集,可以循环数据集,然后将值填充到chart
DBChart1.SeriesList[0].AddXY(),还有很多类似Add的方法,都可以动态填充数值
另外:楼主的算法有问题,只能显示最后一组曲线(因为在分类之后你只有一个数据集),应该每条曲线对应一个数据集,即应该使用动态对象数组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;
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.