Frage zu überladenen Methoden
Hallo,
ich habe folgende Methode: transferData(const aList: TStrings; UpdatePicturePath: boolean; aQuery: TADOQuery): boolean; diese Methode läd Bilder auf einen FTP-Server. In Abhängigkeit von der boolschen Variable UpdatePicturePath soll zusätzlich eine Datenbank aktualisiert werden. aQuery gibt an um welche Datenbank es sich handelt. Das funzt auch soweit. Jetzt soll die Funktion aber nicht nur für ADO-Querys funktionieren sondern auch für ZQuerys oder ganz ohne Querys(nur FTP-Transfer). Das könnte ich ja erreichen, indem ich die Methode überlade: einmal:
Delphi-Quellcode:
dann
transferData(const aList: TStrings): boolean;overload
Delphi-Quellcode:
und:
transferData(const aList: TStrings; aQuery: TADOQuery): boolean;overload
Delphi-Quellcode:
und UpdatePicturePath bräuchte ich dann nicht mehr...
transferData(const aList: TStrings; aQuery: TZDOQuery): boolean;overload
Meine Frage ist, ob man dafür auch theoretisch noch ein anderes Konstrukt nehmen könnte. Vielleicht eines wo man den Parameter aQuery nur angeben muss, wenn UpdatePicturePath = true ist. Und es dann auch egal ist, obs nun eine ADOQuery oder eine ZQuery ist. Aber sowas gibts doch wohl nicht, oder? Gruß Gambit |
Re: Frage zu überladenen Methoden
Delphi-Quellcode:
Könnte klappen ;) Auf jeden Fall musst du dann nur noch die Stringliste als Parameter übergeben.
transferData(const aList: TStrings; UpdatePicturePath: boolean = false; aQuery: TObject = nil): boolean;
begin if aQuery id TADOquery then begin .... end else if aQuery is TZDOQuery then begin .... end; end; |
Re: Frage zu überladenen Methoden
das hört sich ja erstmal ganz nachvollziehbar an.
wenn ich jetzt allerdings beispielsweise
Delphi-Quellcode:
schreiben möchte, meckert der Compiler verständlicherweise, dass er sql nicht kennt...
aQuery.sql.clear
kann ich dann:
Delphi-Quellcode:
schreiben?
TADOQuery(aQuery).SQL.Clear;
|
Re: Frage zu überladenen Methoden
Nun ja. Es ist aber nachvollziehbar.
So geht das :
Delphi-Quellcode:
transferData(const aList: TStrings; UpdatePicturePath: boolean = false; aQuery: TObject = nil): boolean;
begin if aQuery is TADOquery then begin TADOquery(aQuery).sql.... end else if aQuery is TZDOQuery then begin TZDOquery(aQuery).sql.... end; end; |
Re: Frage zu überladenen Methoden
Jepp, Danke!
|
Re: Frage zu überladenen Methoden
Moin!
Aber auch beachten das aQuery nun auch Nil sein kann! MfG Muetze1 |
Re: Frage zu überladenen Methoden
Zitat:
|
Re: Frage zu überladenen Methoden
Zugriff Verletzung.
Besser:
Delphi-Quellcode:
if Assigned(aQuery) then
begin end; |
Re: Frage zu überladenen Methoden
Wenn du aQuery aber nur in den is-Blöcken benutzst, wird nil schon von is abgefangen.
|
Re: Frage zu überladenen Methoden
ja, nur in den is-Blöcken. Sollte eignetlich nix schief gehen...
Danke Gambit |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr. |
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