Autor Beitrag
sunnyandy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mi 05.09.07 09:26 
Hallo!

FZugriffsKomponente ist vom Typ IAccessComponent, welches ein Interface darstellt. "Unterklassen" von IAccessComponent sind TAdoComponent und TOdbcComponent.
Nun möchte ich einfach in der Eigenschaft FZugrifsskomponente speichern, von welchem Typ die Zugriffskomponente ist.
Möchte also auf kein konrektes Objekt verweisen, sondern mir nur merken, von welchem Typ es ist.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private
FZugriffsKomponente: IAccessComponent;

constructor TConfiguration.Erzeugen;
begin
  (*
    TODO hier aus Datei einlesen, welche Zugriffskomponente benutzt werden soll.
  *)

  FZugriffsKomponente := TAdoComponent;


Nun gibt es aber den Fehler, dass IAccessComponent und Class reference nicht kompatibel sind.
Wie kann ich das Problem lösen?

Danke im Voraus! Grüße, Andy
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 05.09.07 09:41 
Was hat das für einen Sinn? Ich meine, du kannst das doch mit is jederzeit überprüfen. Der Grund weshalb das nicht geht: Du hast eine Variable vom Typ der Klasse, d.h. du kannst da hinein Verweise auf eine spezielle Instanz dieser Klasse packen, nicht aber "den Klassentyp".
Wenn dir das mit is nicht ausreicht, dann bleibt dir nur z.B. eine Variable vom Typ Integer, in der du mit verschiedenen Konstanten den Typ dir merkst.

Eigentlich sollte doch aber reichen, wenn du abfragst:
ausblenden Delphi-Quelltext
1:
if FZugriffsKomponente is TAdoComponent then					
Oder?
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 05.09.07 09:54 
Schau mal in der Hilfe nach class of, damit müsstest du weiterkommen.

_________________
Bravery calls my name in the sound of the wind in the night...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 05.09.07 09:56 
user profile iconsunnyandy hat folgendes geschrieben:
Hallo! FZugriffsKomponente ist vom Typ IAccessComponent, welches ein Interface darstellt.

Bis hierhin ok.
user profile iconsunnyandy hat folgendes geschrieben:
"Unterklassen" von IAccessComponent sind TAdoComponent und TOdbcComponent.

Nee, schon falsch. Unterklassen sind das nicht. Denn eine Klasse kann ein Interface nur implementieren, aber kein Nachkomme davon sein.
user profile iconsunnyandy hat folgendes geschrieben:
Nun möchte ich einfach in der Eigenschaft FZugrifsskomponente speichern, von welchem Typ die Zugriffskomponente ist.
Möchte also auf kein konrektes Objekt verweisen, sondern mir nur merken, von welchem Typ es ist.

Dafür gibt es 'Klassenreferenzen'.

Um die Klasse eines Objektes zu ermitteln und in einer Variablen zu speichern, benötigst Du die Oberklasse der zu speichernden Klassen, hier z.B. TCustomConnection
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Type
  TConnectionClasses = Class Of TCustomConnection; // Schlampen würden einfach 'Class Of TObject' schreiben
Var
  FZugriffsKomponente = TConnectionClass;

Begin
  FZugriffskomponente := MyADOConnection.ClassType;
...

_________________
Na denn, dann. Bis dann, denn.
sunnyandy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mi 05.09.07 10:18 
user profile iconalzaimar hat folgendes geschrieben:

Nee, schon falsch. Unterklassen sind das nicht. Denn eine Klasse kann ein Interface nur implementieren, aber kein Nachkomme davon sein.

Ja ich war zu faul, das "Unterklassen" wieder weg zu nehmen und hab es deswegen in Anführungszeichen gesetzt :)

Danke für deine Antwort!
Ich verstehe leider gar nicht, woher TConnectionClasses und TCustomConnection kommen und ob ich das noch anzupassen habe.

Muss ich anstatt TCustomConnection nicht mein IAccessComponent benutzen?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 05.09.07 12:17 
Dein IAccessComponent ist ein Interface, und das hat nun gar nichts mit der TADOConnection zu tun.

TCustomConnection ist in DB deklariert, aber Du kannst auch 'Class of TObject' schreiben.

_________________
Na denn, dann. Bis dann, denn.