Guten Morgen,
was heißt hier niedrige Objektebene? Wieviele Nachfahren von TDBObject willst Du denn erzeugen? Die Klasse TAdresse ist mein Ziel, dort steckt alles drin, was ich in dieser Anwendung benötige. Neben TAdresse gibts noch ein paar andere. Lediglich bei einer Klasse habe ich mich zu ner weiteren Vererbung entschlossen, da ich diese universell einsezten muss:
Delphi-Quellcode:
type THoaiAnsatz=Class(TDBObject)
protected
sHoaiAnsatzNr, sAuftragNr, sBeschreibung, sBearbeiter, sStrasse, sOrt, sTeilort,
sSonstiges, sPLZ:String;
cSchaetzung, cBerechnung, cAnschlag, cFeststellung:Currency;
cSchaetzungHonorar, cAnschlagHonorar, cFeststellungHonorar, cBerechnungHonorar:Currency;
cMwst, cBesondereLeistungen, cLeistungsbild, cNebenkosten, cAbschlag:Currency;
cNebenPauschale, cBLWiederholungen:Currency;
iHoaiZone, iHoaiZuschlag:SmallInt;
iHoaiTeilID:SmallInt;
dtDatum:TDate;
iAuftraggeberID, iHoaiVorlageID, iAuftragID:Int64;
adrAuftraggeber:TAdresse;
sHoaiVorlage:String;
AnrechenbareKost:THoaiAnrechenbareKosten;
IBDatabase:TIBDatabase;
cGrundhonorar:Currency;
iObjektID:Int64;
sBegruendung:TStringList;
procedure SelectValues; override;
procedure SetValues; override;
function GetNebenkostenHonorar:Currency; virtual;
procedure SetSQLStatement;
public
constructor create(DefaultTransaction: TIBTransaction; HOAIAnsatzID:Int64);
procedure free; override;
procedure saveValues; override;
property AnsatzNummer:String read sHoaiAnsatzNr;
property AuftragNummer:string read sAuftragNr;
property Beschreibung:String read sBeschreibung;
....
und deren Ableitungen:
Delphi-Quellcode:
type THoai2Ansatz=Class(THoaiAnsatz)
protected
IBDataSetDetail:TIBDataSet;
cVorplanungen, cEntwurfsplanungen:Currency;
iWiederholungen:Integer;
iVorplanung, iEntwurfsplanung:Integer;
cUmbauzuschlag:Currency;
cWiederholungenHonorar,cWiederholungenLB, cVorhandeneBausubstanz:Currency;
sSQLDetail, sSaveSQLDetail:String;
procedure SelectValues; override;
procedure SaveValues; override;
procedure SetValues; override;
function GetNebenkostenHonorar:Currency; override;
procedure SetSQLStatement;
public
constructor create(DefaultTransaction: TIBTransaction; HOAIAnsatzID:Int64);
procedure free; override;
...
Von den Ableitungen gibts derzeit 2, im Endausbau werden es wohl um die 12 werden.
Ein "allgemeingültiges" Objekt wirst Du nie erzeugen können, wenn Du durch das Objekt (z.B. Adresse:TAdresse) die Eigenschaften auslesen willst (Adresse.Name) Da kannst Du nicht einmal ne Adresse auslesen und ein anderes mal den Lagerbestand! Dazu brauchst Du spezielle Klassen, die sich der Gegebenheit der Tabelle anpassen.
Holger Klemt geht in seinem
Artikel allerdings etwas neutraler an die Sache ran, was aber wieder bedeutet, dass schon bei der Erstellung der Datenbank auf diese Art des Datenbankzugriffs eingegangen werden muss!
Grüße
Lemmy