Hört sich viel zu kompliziert an. Du testest doch die Objektablage. Wenns richtig gemacht sein soll, dann spielt die bei so was mit. Bei mir liegen die Haupt-Datasets im DataModul. Beispiel : Statistik-Dataset ist im Datamodul. Nun brauche ich allerdings auch Vorjahresstatistiken. Hierzu auch ein weiteres Stat-DS. Aber nur für solche Fälle. Das liegt nun aber nicht auch noch im DataModul, sondern auf derjenigen Urform, die ich in mehreren Stufen sowieso an die verschiedenen Vorjahresstatistiken per Objektablage weitervererbe. Das eine Statistik-Dataset liegt deshalb im Datamodul, weil ich es auch zum Speichern benutze. Dazu brauche ich aber keine zwei.
Nun kann ich aber für besagte Vorjahresstatistiken das aus dem DataModul für das eine Jahr verwenden und das zweite für das andere Jahr und fertig. In diesem Fall braucht man nur die Selects dieser beiden Datasets anzupassen. Die Objektablage ist nun aber zusätzlich dazu gut geeignet in der Hierarchie sonstige Steuerelemente EINMALIG unterzubringen. Z.B. eine CheckBox "Monate aufaddieren" Edits "von/bis Monat ,Jahr". Die Urform der Statistik enthält hierbei nur ein paar Panele und eben das Vegleichsjahr-Dataset. Die nächste Form wird um von/bis Edits für Zeitraum erweitert. Soll es eine Artikel-Statistik werden, dann vererbe ich aus der Objektablage die Form mit den von/bis-Edits und füge dann lediglich "von/bis Art.Nr." lblEdits hinzu. Das Dataset ist ja bereits von der Urform bekannt. Letztenendes sieht die Form-Deklaration dann so aus :
Delphi-Quellcode:
uses DM; // erstes Statistik-Dataset aus DataModul hier für ein Jahr benutzen, deshalb : einbinden
...
TfrmStat = class(TForm)
pnlOben: TPanel; // für jede Statistik benötigt : direkt hier deklarieren
pnlMitte: TPanel;
pnlUnten: TPanel;
lblDatum: TLabel;
lblStationNr: TLabel;
lblUeberschrift: TLabel;
sbArtNrAus: TStatusBar;
btnEnde: TButton;
VerglDS: TpFIBDataSet; // in Abkömmlingen für Vorjahreswerte
// Aussehen und Erreignisse zentralisieren:
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure btnStartClick(Sender: TObject); // ACHTUNG ! Enthält Ausgabe (virtual) !!
protected
...
end;
--> nach und nach immer mehr Controls eingefügt, irgendwo verzweigen mit TChart / Stringgrid
TfrmArtChartStat = class(TfrmVonBisChartStat)
edVonArtNr: TlblIntEdit;
edBisArtNr: TlblIntEdit;
gbArtNr: TGroupBox; // enthält Art.Nr.-Edits
procedure gbArtNrExit(Sender: TObject); // falls von > bis Werte hier tauschen
procedure FormShow(Sender: TObject);
protected
VonArtNr,
BisArtNr : integer;
end;
Man schaue sich mal die mickrige Deklaration der unteren Form an. Die enthält aber schon alles !!