Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > TDBChart условия отбора для Series


Автор: Eva_Adamova 11.7.2007, 13:21
Добрый день!
Строю линейный график компонентом DBChart. В нём Series подключён к ADOQuery. В ADOQuery sql запрос, выводящий из базы некую таблицу типа Показатель-Месяц-Год. Мне нужно начертить, к примеру, 3 линейных графика для трёх разных лет. Они выводятся вместе и можно увидеть разницу по сравнению с предыдущими годами. 
Так вот, sql запрос выводит данные за _все_ три года, а в Chart я не смогла найти, как для Series  сделать условие: для конкрентного графика брать данные за определённый год.

Может быть несколько сумбурно всё это описала, объясню ещё раз коротко: 
есть SQL запрос, отбирающий данные за несколько лет. По этим данным строится несколько графиков (в одном компоненте), за каждый год с разбивкой по месяцам по оси Х. SQL запрос выводит данные сразу за несколько лет, но в DBChart я не смогла сделать условие - чертить отдельный график для отдельного года.

Сейчас временно сделала так - три ADOQuery с sql запросом с разбивкой по годам (ADOQuery1 выводит данные за 2005 год, ADOQuery2 - за 2006 год и т.д.). Каждый ADOQuery1 подключён к своему Series в DBChart.  Громоздко и криво, но работает  smile )))

Как сделать что-то типа фильтра (условие) для каждого Series в DBChart?

Delphi 7.
user posted image

Автор: murod 19.7.2007, 20:37
Заполняй в ручную.
вот примерный код:
Код

procedure TForm1.FillChart;
var
serieslist:Tstringlist;
year:string;
series,newseries:TChartSeries;
seriesid:byte;
begin
 serieslist:=TStringList.Create;
 ADOQuery1.First;
 while  not  ADOQuery1.Eof do begin
   year:=adoquery1.FieldByName('year').asstring;
   seriesid:=serieslist.IndexOf(year) ;
   if seriesid<0 then begin // создаем новую серию
     newseries:=TChartSeries.Create(Chart1);
     serieslist.AddObject(year,newseries);
     Chart1.AddSeries(newseries);
     series:=newseries;
   end else series:=TChartSeries(serieslist.objects[seriesid]);
   series.AddXY(ADOQuery1.fieldbyname('x').AsFloat,ADOQuery1.fieldbyname('y').AsFloat);
   ADOQuery1.Next;
 end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)