Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Dataset als Parameter mit OOP oder wie ? (https://www.delphipraxis.net/40364-dataset-als-parameter-mit-oop-oder-wie.html)

Hansa 14. Feb 2005 20:39

Datenbank: IB/FB • Zugriff über: hierfür egal

Dataset als Parameter mit OOP oder wie ?
 
Hi,

ich habe hier verschiedene Forms die dienen zum Ausgeben von Listen. Die gleichen sich schon ziemlich, aber sind nicht identisch. Insbesondere die auzugebenden Daten sind natürlich unterschiedlich. Hierzu habe ich mir eine Klasse gebaut, die ganz grob so aussieht :

Zitat:

Zitat von Pseudocode
ErmittleDaten;
ZeigeKopf;
ZeigePositionen;
ZeigeFuss;

Die Prozeduren sind anfangs leer und werden nach Bedarf von den Nachkommen gefüllt / überschrieben usw. Nur, wo bringe ich jetzt da allgemeingültig das Dataset rein ?

Das wird schon überall gebraucht, ist aber immer eine andere Tabelle. 8) Ich habe nun in der Ursprungsform folgendes stehen :

Delphi-Quellcode:
  ErmittleDaten (DS); // DS ist als VAR Parameter deklariert.
  while not DS.Eof do begin
    ZeigePositionen;
    DS.Next;
  end;
Ich wollte DS erst später konkret besetzen. So scheint es aber nicht zu gehen. Wo muß das DS hin um es später je nach Lage zu nutzen ? So wie es hier steht gibt es nur AVs.

MrSpock 14. Feb 2005 21:15

Re: Dataset als Parameter mit OOP oder wie ?
 
Hallo Hansa,

wie hast du denn ErmittleDaten deklariert?

Delphi-Quellcode:
  procedure ErmittleDaten(DS: TDataSet);
Ist es als Methode zu deiner Klasse oder als globale Prozedur deklariert? Wie sieht der Body der Methode aus?

Hansa 14. Feb 2005 23:33

Re: Dataset als Parameter mit OOP oder wie ?
 
Delphi-Quellcode:
procedure ErmittleDaten(var DS: TDataSet);
Bei mir ist vieles in protected untergebracht :mrgreen: und auch das :

Delphi-Quellcode:
  protected
    DS : TDataset;
Ist natürlich ein FIBdataset, aber das ist egal.

Eben weil ich es später noch brauche. Momentan ist der Stand eben so, daß ich die ganze Prozedur auch leer lassen könnte und schreibe in einem Nachfahren das Dataset im Klartext da rein. Das will ich aber nach Möglichkeit umgehen, denn ich brauche nur einen Platzhalter, der nach Bedarf besetzt wird und dann könnte ich die "ErmittleDaten" Prozedur allgemein halten und nur das jeweilige Dataset verwenden.

Robert_G 14. Feb 2005 23:45

Re: Dataset als Parameter mit OOP oder wie ?
 
Warum sollte das protected sein? :gruebel:
Du hast sicher eine abstrakte Basisklasse...
Die bekommt ein privates Feld fDataSet vom Typ TDataSet. Dazu eine öffentliche oder protected readonly Property DataSet.
Der Constructor der Basisklasse schuckt ein const aDataSet :TDataSet und besetzt damit fDataSet. Warum sollten die Nachfahren auch diekten Zugriff darauf haben? :gruebel:

Sprint 14. Feb 2005 23:49

Re: Dataset als Parameter mit OOP oder wie ?
 
Zitat:

Zitat von Hansa
[...]denn ich brauche nur einen Platzhalter, der nach Bedarf besetzt wird und dann könnte ich die "ErmittleDaten" Prozedur allgemein halten und nur das jeweilige Dataset verwenden.

Warum machst du das nicht über Eigenschaften?

Delphi-Quellcode:
type
  TVorfahre = class
  private
    FDataset: TDataSet;
  protected
    procedure ErmittleDaten; virtual; abstract;
    procedure ZeigeKopf; virtual; abstract;
    procedure ZeigePositionen; virtual; abstract;
    procedure ZeigeFuss; virtual; abstract;
    property Dataset: TDataSet read FDataset write FDataset;
  end;
Delphi-Quellcode:
type
  TNachkomme = class(TVorfahre)
  ...
  public
  ...
    property Dataset;
  end;

Hansa 15. Feb 2005 00:49

Re: Dataset als Parameter mit OOP oder wie ?
 
So, Thx, das geht jetzt so weit. Property war tatsächlich das, was ich vermißt hatte. Es wird schon mal compiliert. :mrgreen: Allerdings kommt noch AV beim ersten Zugriff auf "Dataset".

Das muß doch wohl noch irgendwo her kommen bzw. erzeugt werden. Wenn das noch jemand wüßte, wäre echt nett. Für jetzt reichts mir erst mal. 8)

Lemmy 15. Feb 2005 06:10

Re: Dataset als Parameter mit OOP oder wie ?
 
Hi,

das DataSet über eine Property zu setzen ist nicht wirklich gut. Wenn dann sollte das über den Konstruktor laufen:

constructor create(DS:TFIBDataSet);

Grüße
Lemmy

Hansa 15. Feb 2005 12:24

Re: Dataset als Parameter mit OOP oder wie ?
 
Was ? Nicht wirklich gut ? :shock: Dann muß ich anders fragen : was ist besser ? :lol: Ich habe das ja auch nur mit property gemacht, weil Sprint und Robert_G gesagt haben, so sollte ich es machen. :mrgreen:

Soweit scheint das ganze ja auch zu gehen, bis auf die Zugriffsverletzung, weil das Ding wohl nicht initialisiert ist. Ich muß doch bestimmt zumindest den Tabellennamen mit angeben. Was überhaupt alles ?

Eigentlich hatte ich vor dem property-Dataset ein konkretes aus meinem Datenmodul zuzuweisen. Also so :

Delphi-Quellcode:
Dataset := KundeDS; // Dataset : property KundeDS : aus Datemodul
Hierbei kommt dann Zugriffsverletzung :

Delphi-Quellcode:
Dataset.close;
Das ist der erste Zugriff auf "Dataset" überhaupt.

Robert_G 15. Feb 2005 12:26

Re: Dataset als Parameter mit OOP oder wie ?
 
Wie? Was? Wo?
Hast du dir überhaupt meinen Post durchgelesen? :roll:

Hansa 15. Feb 2005 12:42

Re: Dataset als Parameter mit OOP oder wie ?
 
Ich bräuchte ein Beispiel für den Constructor. Momentaner Stand ist, daß ich das von Sprint so umgesetzt habe. Also habe ich statt meines konkreten Datasets eben "Dataset" da stehen, kann aber nicht drauf zugreifen. Mit ein paar Wörtern alleine komme ich so nicht weiter. Wo muß der Konstruktor genau hin ? Wie sieht er konkret aus ?

Bzw. um es nochmals zu sagen : wie teile ich meinem Programm mit, daß es sich an einer Stelle bei Dataset um den Lagerbestand handelt und woanders z.B. um eine Adresse ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.
Seite 1 von 2  1 2      

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