![]() |
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:
Das wird schon überall gebraucht, ist aber immer eine andere Tabelle. 8) Ich habe nun in der Ursprungsform folgendes stehen :
Delphi-Quellcode:
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.
ErmittleDaten (DS); // DS ist als VAR Parameter deklariert.
while not DS.Eof do begin ZeigePositionen; DS.Next; end; |
Re: Dataset als Parameter mit OOP oder wie ?
Hallo Hansa,
wie hast du denn ErmittleDaten deklariert?
Delphi-Quellcode:
Ist es als Methode zu deiner Klasse oder als globale Prozedur deklariert? Wie sieht der Body der Methode aus?
procedure ErmittleDaten(DS: TDataSet);
|
Re: Dataset als Parameter mit OOP oder wie ?
Delphi-Quellcode:
Bei mir ist vieles in protected untergebracht :mrgreen: und auch das :
procedure ErmittleDaten(var DS: TDataSet);
Delphi-Quellcode:
Ist natürlich ein FIBdataset, aber das ist egal.
protected
DS : TDataset; 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. |
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: |
Re: Dataset als Parameter mit OOP oder wie ?
Zitat:
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; |
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) |
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 |
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:
Hierbei kommt dann Zugriffsverletzung :
Dataset := KundeDS; // Dataset : property KundeDS : aus Datemodul
Delphi-Quellcode:
Das ist der erste Zugriff auf "Dataset" überhaupt.
Dataset.close;
|
Re: Dataset als Parameter mit OOP oder wie ?
Wie? Was? Wo?
Hast du dir überhaupt meinen Post durchgelesen? :roll: |
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 00:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz