Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TObject Zuweisung + Verwendung (https://www.delphipraxis.net/48786-tobject-zuweisung-verwendung.html)

Leominora 30. Jun 2005 10:05


TObject Zuweisung + Verwendung
 
Hallo,

ich habe ein Objekt.

Query : TObject;

Diesem Objekt möchte ich je nachdem eine vorhandene TQuery (DM1.DBQ_A)
oder eine vorhandene ToraQuery (DM1.OSQ) zuweisen,
weil beide genau die gleichen Methoden und Eigenschaften verwenden,
die ich danach anspreche.

if [...]
Query := DM1.DBQ_A as TQuery;
else
Query := DM1.OSQ as ToraQuery;

Query.activate;
[...]
So bleibt mein Objekt aber leer.
Wie mache ich das richtig?

Und das zweite ist, geht das überhaupt,
dass ich dem Objekt dieses activate zuweisen kann,
weil da der Compiler schon meckert.?

Danke schon mal im voraus

Leo

shmia 30. Jun 2005 10:27

Re: TObject Zuweisung + Verwendung
 
Du hast anscheinend 2 Klassen, die ähnlich, aber doch nicht gleich sind.
(TQuery und TOraQuery)
Du musst die nächst mögliche gemeinsame Basisklasse suchen.
Die gemeinsame Basisklasse ist in deinem Fall: TDataset
Delphi-Quellcode:
var
   ds : TDataset;
begin
   if useoracle then
      ds := DM1.OSQ
   else
      ds := DM1.DBQ_A;

  ds.Active := True;
  while not ds.Eof do
  begin
     ShowMessage(ds.Fields[0].AsString);
     ds.Next;
  end;
  ds.Close;
  // wichtig:
  // ds ist nicht mit Free freigeben
end;

Leominora 30. Jun 2005 11:33

Re: TObject Zuweisung + Verwendung
 
Danke, genau das habe ich gesucht!

Leider besitzt das TDataset keine Eigenschaft SQL,
was mich nun auch nicht weiterbringt...


Leo

generic 30. Jun 2005 12:02

Re: TObject Zuweisung + Verwendung
 
bau dir eine factoryklasse welche ein tdataset zurückliefert.

die factory hat als parameter dann das sql und erzeugt intern dann das spezielle dataset für die datenbank.

shmia 30. Jun 2005 12:04

Re: TObject Zuweisung + Verwendung
 
Zitat:

Zitat von Leominora
Leider besitzt das TDataset keine Eigenschaft SQL,
was mich nun auch nicht weiterbringt...

Macht aber nix.
Du hast immer die Möglichkeit, mit dem is Operator den Klassentyp abzufragen und dann zu casten:
Delphi-Quellcode:
var
   ds : TDataset;
begin
   if useoracle then
      ds := DM1.OSQ
   else
      ds := DM1.DBQ_A;
   ....
   if ds is TOraQuery then
      TOraQuery(ds).SQL.Text := 'SELECT * FROM ....'
   else if ds is TQuery then
      TQuery(ds).SQL.Text := 'SELECT * FROM ....';
In vielen Fällen kann man mit den Methoden & Properties von TDataset auskommen.
Es bietet sich an, dies Codeblöcke in eigene Proceduren auszulagern und das Dataset als
Parameter zu übergeben.

Nur an wenigen Stellen muss man an die Methoden & Properties der spezialisierten Query-Klasse heran. (siehe der Hinweis von generic)

Leominora 30. Jun 2005 13:42

Re: TObject Zuweisung + Verwendung
 
Danke!

War genau das, was mir noch gefehlt hat!
Nun funktioniert es! :spin2:

Leo


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 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