Pobranie danych z mysql i przedstawienie ich na wykresie

0

Witam serdecznie mam pytanko otoz mam sobie tabele w bazie danych o nazwie tabhelp jest tam ponad 40 kolumn ale ja potrzebuje dane z tylko 4 kolumn przedstawic na wykresie sprawa wyglada tak
user wybiera sobie rok z comboboxa np 2009 i chce aby na wykresie pojawily sie dane tylko z 2009 roku z 4 kolumn z tabeli tabhelp sa to kolejno kolumna 9,10,11,12.

Czyli
user image

0

Udalo mi sie zrobic cos takiego:

procedure TZestawienie.ComboBox1Change(Sender: TObject);
var
  i,j : integer;
  zapytanie, tmp: string;
  tablica : array [0..3,0..11] of Double;
begin
  Chart1.Title.Text.Clear;
  Chart1.Title.Text.Add('Zestawienie za rok: ' + ComboBox1.Text);
  for i:=0 to 3 do
  begin
    Chart1.SeriesList.Series[i].Clear(); //czyszczenie i-tych serii
        if i=0 then
        tmp := 'prad11';
        if i=1 then
        tmp := 'prad12';
        if i=2 then
        tmp:= 'gaz1';
        if i=3 then
        tmp:= 'woda1';
              DM.ZQuery1.Close;
              zapytanie:= 'SELECT * FROM tabhelp where (data1 like "' + Combobox1.text + '%") AND nrmieszkania = "' + frmOblicz.GroupBox1.Caption + '";';
              DM.ZQuery1.SQL.Text:= zapytanie;
              DM.ZQuery1.Open;
              for j:=0 to 11 do
                  begin
                    tablica[i,j]:=StrToFloat(DM.ZQuery1.FieldByName(tmp).AsString);
                    DM.ZQuery1.Next;
                  end;
        //dodawanie j-tej wartości w i-tej serii
        Chart1.SeriesList.Series[i].Add(tablica[i,j]);
  end
end;

Wszystko ladnie pieknie do tablicy wpisuja sie dane natomiast przy przeslaniu ich do chart1

Chart1.SeriesList.Series[i].Add(tablica[i,j]);

Jakies dziwne wyniki sie wpisuja ... moze ktos pomoc ??

0

gdyby ktos byl zainteresowany na przyszlosc ... poradzilem sobie sam :)

procedure TZestawienie.ComboBox1Change(Sender: TObject);
var
  i, j, a : integer;
  zapytanie, tmp: string;
  tablica : array [0..3,0..11] of Double;
begin
  Chart1.Title.Text.Clear;
  Chart1.Title.Text.Add('Zestawienie za rok: ' + ComboBox1.Text);
  for i:=0 to 3 do
  begin
    Chart1.SeriesList.Series[i].Clear(); //czyszczenie i-tych serii
    // pobieranie nazwy kolumny z tabeli tabhelp w zaleznosci od nr i
        if i=0 then
        tmp := 'roznicaprad1';
        if i=1 then
        tmp := 'roznicaprad2';
        if i=2 then
        tmp:= 'roznicagaz';
        if i=3 then
        tmp:= 'roznicawoda';
    // procedura pobierajaca dane z tabeli tabhelp
    DM.ZQuery1.Close;
    zapytanie:= 'SELECT * FROM tabhelp where (data1 like "' + Combobox1.text + '%") AND nrmieszkania = "' + frmOblicz.GroupBox1.Caption + '";';
    DM.ZQuery1.SQL.Text:= zapytanie;
    DM.ZQuery1.Open;
    // sprawdzanie ile rekordow odpowiada naszemu zapytaniu
      a:=DM.ZQuery1.RecordCount;
        for j:=0 to a-1 do
          begin
            //wpisanie do tablicy naszych wynikow
            tablica[i,j]:=StrToFloat(DM.ZQuery1.FieldByName(tmp).AsString);
            //dodawanie j-tej wartości w i-tej serii
            Chart1.SeriesList.Series[i].Add(tablica[i,j]);
            DM.ZQuery1.Next;
          end;
  end
end;
0

zamiast SELECT * FROM tabhelp WHERE ...
zrob SELECT nazwy pol ktore Cie interesuja FROM tabhelp WHERE...

zamiast

  a:=DM.ZQuery1.RecordCount;
        for j:=0 to a-1 do
          begin
            {...}
            DM.ZQuery1.Next;
          end;

zrob

while not DM.ZQuery1.eof do begin
  {...}
  DM.ZQuery1.Next;
end;
0

co do selecta po wywolaniu * moge potem pobierac sobie dowolne pola poprzez wywoanie

DM.ZQuery.FieldByName(tmp).AsString;

poczytaj kod to zobaczysz ze dla i=1 jest inne pole i dla i=0 tez jest inne

Co do drugiego EoF to jest potem problem przy wpisywaniu do tablicy(i,j) ... i wyswietlaniu tego na wykresie ... gdy wszystkie dane w roku sa rowne np 12 wtedy jest luz jesli ta liczba sie zmienia potem na wykresie sa rozne bardzo dziwne rzeczy... kod jest tak przemyslany zeby byl funkcjonalny niekoniecznie optymalny ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1