Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu überladenen Methoden (https://www.delphipraxis.net/43110-frage-zu-ueberladenen-methoden.html)

Gambit 29. Mär 2005 12:27


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:
transferData(const aList: TStrings): boolean;overload
dann
Delphi-Quellcode:
transferData(const aList: TStrings; aQuery: TADOQuery): boolean;overload
und:
Delphi-Quellcode:
transferData(const aList: TStrings; aQuery: TZDOQuery): boolean;overload
und UpdatePicturePath bräuchte ich dann nicht mehr...

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

Dax 29. Mär 2005 12:37

Re: Frage zu überladenen Methoden
 
Delphi-Quellcode:
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;
Könnte klappen ;) Auf jeden Fall musst du dann nur noch die Stringliste als Parameter übergeben.

Gambit 29. Mär 2005 12:53

Re: Frage zu überladenen Methoden
 
das hört sich ja erstmal ganz nachvollziehbar an.

wenn ich jetzt allerdings beispielsweise

Delphi-Quellcode:
aQuery.sql.clear
schreiben möchte, meckert der Compiler verständlicherweise, dass er sql nicht kennt...

kann ich dann:

Delphi-Quellcode:
TADOQuery(aQuery).SQL.Clear;
schreiben?

sniper_w 29. Mär 2005 12:57

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;

Gambit 29. Mär 2005 13:00

Re: Frage zu überladenen Methoden
 
Jepp, Danke!

Muetze1 29. Mär 2005 13:02

Re: Frage zu überladenen Methoden
 
Moin!

Aber auch beachten das aQuery nun auch Nil sein kann!

MfG
Muetze1

Gambit 29. Mär 2005 13:14

Re: Frage zu überladenen Methoden
 
Zitat:

Zitat von Muetze1

Aber auch beachten das aQuery nun auch Nil sein kann!

bedeutet?

sniper_w 29. Mär 2005 13:18

Re: Frage zu überladenen Methoden
 
Zugriff Verletzung.
Besser:
Delphi-Quellcode:
 if Assigned(aQuery) then
 begin
 end;

Khabarakh 29. Mär 2005 13:27

Re: Frage zu überladenen Methoden
 
Wenn du aQuery aber nur in den is-Blöcken benutzst, wird nil schon von is abgefangen.

Gambit 29. Mär 2005 14:17

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