Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rave und Aggregates (https://www.delphipraxis.net/11738-rave-und-aggregates.html)

iamjoosy 12. Nov 2003 21:00


Rave und Aggregates
 
Hi,
habe versucht Aggregate fields von einem Clientdataset in Rave angezeigt zu bekommen - aber ohne Erfolg. Nur die normalen data fields erschienen in dem Rave Data View. Hat irgendjemand eine Idee dazu ?
Um die Sache zu präzisieren: Habe ein Clientdataset mit einer Hand normaler data fileds und einige Aggregate fileds, die mir durchschnittswerte berechenen. Möchte diese werte nun in Rave in DataText-Komponenten anzeigen. Mit DBText kein Problem, aber in der Dataview Komponente in Rave erscheinen nur die data fileds und nicht die Aggregate Fields !

TIA

joosy

Matt 13. Nov 2003 07:10

Re: Rave und Aggregates
 
Ich habe sowas mal gelöst in dem ich einfach die benötigten Werte mit einem TQuery berechnet habe und das habe ich dann in Rave einfach als zweite Datenquelle mit angegeben.

iamjoosy 13. Nov 2003 08:53

Re: Rave und Aggregates
 
Hi Matt,
das Problem ist, dass ich ausschliesslich mit CLientdatasets und Localen Files (also MYbase) arbeite. Da fällt eine Tquery Komponente leider raus.
Das Problem ist, ich kann mir die Aggregate Fields in einem Dbtext auf jeder Form anzeigen lassen, und ich verstehe nicht wieso die Aggregate Fields nicht auch in Rave zu sehen sind.

Um das Problem zu lösen, habe ich auch schon andere Varianten im Kopf (zur Not mache ich das eben über eine Rave Custom Connection), aber ich würde gerne das Prinzip vertstehen, warum es nicht auch direkt über eine Rave Dataset Connection geht .

Trotzdem vielen Dank für deinen Rat.

P.s: Bin hier ganz neu und möchte hier mal grosses Lob aussprechen !!!

iamjoosy 14. Nov 2003 08:26

Re: Rave und Aggregates
 
Hmmmm, das Problem scheint wohl nicht so ganz trivial zu sein .... werde mal weiter nach einer Lösung suchen und bei erfolg euch diese mitteilen.

merlin17 14. Nov 2003 11:57

Re: Rave und Aggregates
 
hey,
kläre mich bitte einmal kurz über die cds-aggregates auf.
muss zu meiner schande gestehen, dass ich bisher mit cds "eher
weniger" gearbeitet habe.
ist es vergleichbar mit calculatedfields von TDataset ?!


:-) thomas, TeamNevrona

iamjoosy 14. Nov 2003 12:45

Re: Rave und Aggregates
 
Hi Thomas,
also Aggregate Fields sind (wie Calculated Fields auch) virtuelle Felder. D.h. sie werden nie in einer Datenbank abgespeichert, sondern zur Laufzeit berechnet (via einer Expression, wie z.B. avg(Fieldxy)). Ansonsten verhalten sie sich eigentlich wie normale data fields und man kann Sie z.B. in einem dbText anzeigen. (Man kann Sie auch verwenden um Gruppenstatistiken zu verwenden, aber das spielt für mein Problem eigentlich keine Rolle, da ich Mittelwerte über einen gefilterten Datensatz berechene). So, ich hoffe, das ist erst mal genügend Info über Aggregates.

BTW: Du kannst einfach mal folgendes einfaches Beispiel ausprobieren:

1) EIn ClientDataset auf die Form
2) Doppelclick für Feldeditor
3) CTRL-N für neues Feld : Name: xy type: integer, data type:data
4) CTRL-N : Name: AVGxy type aggregate, data type: aggregate
4.1) Rechte Maus Click auf ClientDataSet und Create Dataset
5) Expression Property von AVGxy: avg(xy)
6) Active Property von AVGxy:true
7) AggregatesActive Property von ClientdataSet1: true

8) Datasource auf Form
9) DBtext auf Form , Datasource auswählen
10) bei DataFields siehst du xy und AVGxy

11) Mache eine RavedatsetConnection (Dat weisst du ja)
12) Schau im Rave Dataview nach was du siehst (Nämlich nur xy)
13) Warum ??????

merlin17 14. Nov 2003 13:47

Re: Rave und Aggregates
 
hey,

man lernt nie aus... habe mir gerade die cds-komponenten einmal näher angeschaut.
richtig: rave erkennt im ersten moment nur die "echten" und die kalkulierten felder.
die aggregates werden nicht erkannt. aber die cds-komponente trennt ja auch optisch diese zwei spalten typen :-)

aber ist soweit auch kein problem. mit nachfolgendem codeschnipsel habe ich so auf die schnelle die virtuelle spalte "durch" an
die reportengine übergeben.
vereinfacht gesagt, habe ich über die rave-calculated fields diese "etwas andere" spalte angefügt und damit werden sie in rave nutzbar (aber beim refresh (!!!danach nicht mehr notwendig!) der rave dataview muss deine applikation laufen!)

der durchschnittswert der felder wurde korrekt übergeben (bei jedem datensatz, ist aber vom ergebniss nicht schädlich, oder ?)

Code:
procedure TForm1.RvDataSetConnection1GetRow(
  Connection: TRvCustomConnection);
begin
  begin
    with Connection do
    begin
      DoGetRow;
      WriteFloatData(ClientDataSet1.FieldByName('durch').AsVariant, 0);
    end;
  end;
end;

procedure TForm1.RvDataSetConnection1GetCols(
  Connection: TRvCustomConnection);
begin
  begin
    with Connection do
    begin
      DoGetCols;
      WriteField('durch', dtFloat, 1, '', '');
    end;
  end;
end;
schicke bitte ein kurzes feedback hier ob dein problem damit gelöst ist!!


gruss und ein schönes wochenende



:-) thomas, TeamNevrona

iamjoosy 14. Nov 2003 13:51

Re: Rave und Aggregates
 
Ok, habe weiter nachgedacht und geforscht und bin zu folgendem gekommen:
Die Aggregate Fields erscheinen zwar im Object Treeview unter "Fields", dort allerdings mit einem Index von -1, was mich dann doch etwas stutzig gemacht hat. Deshalb habe ich mal die Fields zur Laufzeit ausgezählt (Fields.Count) und siehe da, es sind nur die Datenfelder dort abgelegt. Weitere Forschung: Aggreagte Fields werden in einer eigenen Collection AggFields verwaltet. Die gibt es schon ab TDataSet, werden aber erst ab TClientDataset verwendet.

Meine Vermutung ist also:

DBText weiß wahrscheinlich dass es Fields und AggFields gibt und gibt diese beide im DataField Property Editor an.
Rave bzw. eine DataView Komponente liest wahrscheinlich nur die Fields Collection aus.

Ergo: Ich muss wohl auf meine Aggregates in Rave verzichten.

ISt aber nicht so schlimm, bastelt ich eben eine Lösung drum rum (Ein zweites Clientdataset in das ich die Aggreagtes reinschreibe z.B)

merlin17 14. Nov 2003 13:55

Re: Rave und Aggregates
 
<<Ergo: Ich muss wohl auf meine Aggregates in Rave verzichten. >>
probiere ersteinmal meine obige lösung (ist 4 minuten alter als deine message :-)) aus !

:-) thomas, TeamNevrona


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz