Avatar billede madshenrik Nybegynder
16. marts 2000 - 08:59 Der er 6 kommentarer og
1 løsning

Statistik med data fra sql query

Hvis jeg laver en sql forespørgsel der f.eks. ser således ud.

select sum(antal), navn
from tabel
where antal=antal
groupby navn

kan man så i delphi lave noget statistik over dette, f.eks. ved hjælp af VtChart. Hvor navn er x aksen og antal er Y aksen.
Avatar billede pellelil Nybegynder
16. marts 2000 - 10:30 #1
Selvfølgelig kan du det. Du løber blot dit resultat igenne

if not ((Query.EOF) and (Query.BOF)) then begin
  Query.First;
  while not (Query.EOF) do begin
    Chart.whatever.X = Query.FieldByName('bla.bla.').AsString;
    Chart.whatever.Y = Query.FieldByName('bla.bla.').AsInteger;
    Query.Next;
  end;
end;

Som du ser har jeg ikke brugt alverdens kræfter på at sætte mig ind i hvordan du tildeler data til dit VtChart, men jeg kan ikke forestille mig at det skal være specielt svært.

Med hensyn til "FieldByName" så kan du i din query vælge at give kolonnerne "overskrift" og bruge dennes navn, men du kan i stedet vælge at bruge "index nummeret" på kolonnen (du ved selv hvad du har valgt og i hvilken række flg.): "y := Query.Fields[0].AsInteger;"
Avatar billede madshenrik Nybegynder
16. marts 2000 - 17:41 #2
Jeg havde forestillet mig noget i retning af at man aflevere sql resultatet til et dbgrid og derefter brugte dette til at lave grafen udfra.
Avatar billede pellelil Nybegynder
16. marts 2000 - 19:03 #3
Det kunne man også, men hvis du ellers ikke har brug for grid'en, så ville jeg kalde det at gå over "åen efter vand". Hvis du har brug for at "pille" yderligere ved de data du læser via din query, så ville jeg oprette en speciel class, som jeg fylder i en TList.

type
  TQueryGraphItem=Class
  private
    FNavn : String;
    FValue : Item;
    // ... bla. bla. bla. (Ydeligere felter/funktioner)
  public
    Property Navn : String read FNavn write FNavn;
    Property Value : Integer read FValue write FValue;
  end;
//...
var
  List : TList;
  QueryGraphItem : TQueryGraphItem;
//...
List := TList.Create;
if not ((Query.EOF) and (Query.BOF)) then begin
  Query.First;
  while not (Query.EOF) do begin
    QueryGraphItem : TQueryGraphItem.Create;
    QueryGraphItem.Name = Query.FieldByName('bla.bla.').AsString;
    QueryGraphItem.Value = Query.FieldByName('bla.bla.').AsInteger;
    List.Add(QueryGraphItem);
    Query.Next;
  end;
end;
//... Lav dine grafer ...
if List.Count > 0 then begin
  for iIdx := List.Count-1 downto 0 do begin
    TQueryGraphItem(List.Item[iIdx]).Free;
  end;
end;
List.Free;
Avatar billede madshenrik Nybegynder
27. marts 2000 - 22:35 #4
pellelil i dit første eks. hvordan tilskriver man da data til f.eks. vtchart. Jeg kan ikke rigtigt finde noget der dur.
Avatar billede pellelil Nybegynder
29. marts 2000 - 09:02 #5
Jeg har ikke selv arbejdet (ret meget) med vtchart, så jeg kan ikke lige (on top of my head) fortælle dig hvordan du skal tilføje dine data til en chart, men jeg kan ikke forestille mig at det skulle være svært. Du skal nok oprette en "serie" hvori du fylder dine tal fra query'en.
Avatar billede madshenrik Nybegynder
29. marts 2000 - 21:55 #6
kan du uddybe det en smule så skal jeg nok selv kigge på det.
Avatar billede pellelil Nybegynder
01. april 2000 - 13:09 #7
Jeg har kigget LIDT på vtchart og kan godt forstå hvorfor du ikke kan finde ud af det, for det kunne jeg heller ikke inden for de rammer hvor jeg gad at bruge tid på det. Jeg vil i stedet foreslå at du kigger på TChart som mig bekendt skulle følge med Delphi helt ned til version 3. vtChart er en "død sild" som der ikke længere udvikles på hvorimod TeeChart (som den også hedder) er "still going strong". Delphi Informant har en online artikkel, der kan fortælle dig noget mere om TeeChart, på adressen: http://www.delphizine.com/features/1997/10/di199710cj_f/di199710cj_f.asp

Nedenstående viser hvordan du kan fylde data i dit TeeChart mens programmet læser fra databasen (programmet forudsættet at du under "design-time" har tilføjet en "serie" til chartet - evt. som en "3D Pie"):

if not ((Query.EOF) and (Query.BOF)) then begin
  Query.First;
  while not (Query.EOF) do begin
    iVaerdi := Query.FieldByName('TalVaerdi').AsInteger;
    szNavn  := Query.FieldByName('VaerdiNavn').AsString;
    Series1.AddY(iVaerdi, szNavn, clRed);
    Query.Next;
  end;
end;

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester