![]() |
3 Schichtversuch
Hallo,
zuzeit befasse ich mit 3 Schichtarchitektur unter Delphi und bin da auf folgendes Problem gestoßen. Beim instanzieren des Mittleren und des untern DB(ADO)-Objekts kommt eine Fehlermeldung die besagt, dass ich Parameter bräuchte bei .Create obwohl ich garkeinen Konstruktor und somit keine Parameter implementiert habe. Hier der Quelltext dazu
Delphi-Quellcode:
type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; ADOQuery: TADOQuery; EditVVertragsNr: TEdit; LabelVVertragsNr: TLabel; LabelVEFDatum: TLabel; DTPVEFDatum: TDateTimePicker; ButtonVSuchen: TButton; procedure FormShow(Sender: TObject); procedure ButtonVSuchenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TVertrag = class(TForm1) private { Private-Deklarationen } iVertragsID : integer; sVertragsNummer : string; dErfasstAm : TDate; public { Public-Deklarationen } procedure SetVertragsNummer(VNr : string); procedure SetErfasstAm(EfDate : TDate); function GetVertragsNummer : string; function GetErfasstAm : TDate; end; type TDBVertrag = class(TVertrag) private { Private-Deklarationen } public { Public-Deklarationen } function Suchen(qry : TADOQuery) : boolean; Overload; end; var Form1: TForm1; Vertrag : TVertrag; DBVertrag : TDBVertrag; implementation {$R *.dfm} { TVertrag } // Vertragsdatum für die GUI-Schicht auslesen function TVertrag.GetErfasstAm: TDate; begin GetErfasstAm := dErfasstAm; end; // Vertragsnummer für die GUI-Schicht auslesen function TVertrag.GetVertragsNummer: string; begin GetVertragsNummer := sVertragsNummer; end; // Vertragsdatum in der Mittelschicht eintragen procedure TVertrag.SetErfasstAm(EfDate: TDate); begin dErfasstAm := EfDate; end; // Vertragsnummer in der Mittelschicht eintragen procedure TVertrag.SetVertragsNummer(VNr: string); begin sVertragsNummer := VNr; end; { TDBVertrag } // ADO - Vertrag suchen function TDBVertrag.Suchen(qry: TADOQuery): boolean; var statement : string; bcheck : boolean; begin bcheck := true; with qry do begin Close; SQL.Clear; statement := 'select * from VERTRAG order by ERFASSTAM asc'; SQL.Text := statement; end; qry.ExecSQL; DMAdo.ADOConnection.BeginTrans; DMAdo.ADOConnection.CommitTrans; qry.Open; exit(true); end; // Button Vertrag suchen procedure TForm1.ButtonVSuchenClick(Sender: TObject); var stmp : string; begin stmp := ''; if (DBVertrag.Suchen(ADOQuery = true)) then begin stmp := ADOQuery.FieldByName('VERTRAGSNR').Value; Vertrag.SetVertragsNummer(stmp); EditVVertragsNr.Text := Vertrag.GetVertragsNummer; end; end; // Hauptformular laden procedure TForm1.FormShow(Sender: TObject); var bError : boolean; sVerbindungsString : string; begin DMAdo := sVerbindungsString; try if(DMAdo.ADOConnection.Connected) then Exit; DMAdo.ADOConnection.Open; except // Benutzername oder Passwort nicht korrekt bError := False; end; ADOQuery.Connection := DMAdo.ADOConnection; Vertrag := TVertrag.Create(); DBVertrag := TDBVertrag.Create(); end; end. |
AW: 3 Schichtversuch
Hallo,
Ganz einfach: Leite deinen TVertrag nicht von TForm1 ab. Das macht einfach überhaupt keinen Sinn. Daher hast du auch den constructor von TForm geerbt. Einfach
Delphi-Quellcode:
in
TVertrag = class(TForm1)
Delphi-Quellcode:
ändern
TVertrag = class
|
AW: 3 Schichtversuch
Ich weiß jetzt auch nicht so genau, ob das das eine 3-Schicht Architektur ist (3-Tier). So wie ich das verstanden habe, sind die Schichten so aufgeteilt
1. Datenbank 2. Applikationsserver mit Mittelschicht, der sich mit der/den Datenbanken verbindet 3. Client, die die Daten von der 2.Schicht abholen und dorthin zurück schicken Jedenfalls hab ich das immer so programmiert und das als 3-Tier verkauft. |
AW: 3 Schichtversuch
Irgendwie ist das aber kein 3-Schichten-Modell sondern MVC (Model-View-Controller) bzw. MVVM (Model-View-ViewModel)
Zitat:
|
AW: 3 Schichtversuch
Zitat:
Weil das hört sich schon viel weniger altbacken an als Client-Server-Architektur. |
AW: 3 Schichtversuch
Zitat:
Alles ohne Interfaces und mit globalen Variablen in einer Unit? |
AW: 3 Schichtversuch
Zitat:
Eine Client-Server-Architektur ist aber nicht auch automatisch eine 3-Schicht-Architektur |
AW: 3 Schichtversuch
Zitat:
Zitat:
Aber das stand ja schon im Titel ;) |
AW: 3 Schichtversuch
Zitat:
MVC, MVP, MVVM,... Und eine Muster Projektgruppe für eine 3 Schicht Architektur? |
AW: 3 Schichtversuch
Zitat:
Sinnvoll und wünschenswert wäre sowas durchaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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