Hi Hansa,
muss mich entschuldigen! Ich übergebe dem Konstruktor kein DataSet, sondern die Datenbankverbindung mittels der IBDatabase oder der IBTransaction:
also hier mal ein Beispiel (mit IBX, was aber nichts zur Sache tut):
Delphi-Quellcode:
type TDBObject=class(TObject)
private
protected
iID:Int64;
IBDataSet:TIBDataSet;
sSQL, sSaveSQL:String;
bSave, bExpicitTransaction:Boolean;
Transaction:TIBTransaction;
procedure SetSQLStatement; virtual;
procedure SaveValues; virtual;
procedure SelectValues; virtual; abstract;
procedure SetValues; virtual;
public
constructor create(DefaultDataBase:TIBDataBase); overload;
constructor create(DefaultTransaction:TIBTransaction); overload;
procedure Free; virtual;
procedure Save;
property SaveDB:Boolean read bSave write bSave;
property ID:Int64 read iID;
end;
und hier die abgeleitete Klasse:
Delphi-Quellcode:
type TAdresse=class(TDBObject)
private
sName, sStrasse, sOrt, sTelefon, sFax, sAnrede, sTitel, sAnschrift:String;
protected
procedure SelectValues; override;
public
constructor create(DefaultDataBase:TIBDataBase; AdresseID:Int64);
property Name:String read sName write sName;
property Strasse:String read sStrasse write sStrasse;
property Ort:String read sOrt write sOrt;
property Telefon:String read sTelefon write sTelefon;
property Fax:String read sFax write sFax;
property Anrede:String read sAnrede write sAnrede;
property Titel:String read sTitel write sTitel;
property Anschrift:String read sAnschrift;
end;
Im Konstruktor der Klasse TDBObject wird je nach aufgerufenen Konstruktor eine IBDataSet oder eine IBTransaction + IBDataSet erzeugt und natürlich beim Destruktor wieder freigegeben. Ich habe so einige Klassen erzeugt, teilweise auch mit Enkeln (wie nennt man das, wenn man eine Klasse ableitet und von dieser wieder ableitet?).
Die Übergabe der IBDataSet bzw. Transaction mache ich deshalb, um zum einen bei der IBDataset innerhalb der Klasse die Transaktionssteuerung zu machen, oder wenn ich die Transaction-Instanz übergebe wird die Transaktionssteuerung außerhalb der Klasse vorgenommen (wenn das Objekt der Klasse z.B. von einem anderen Objekt (z.B: Auftrag) aufgerufen wird).
Grüße
Lemmy