Announcement

Collapse
No announcement yet.

Mehrere DB Komponenten erweitern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere DB Komponenten erweitern

    Hallo!<br>
    Aufgabe:<br>
    Erweitern mehrerer DB Komponenten von Delphi mit einer Funktion zum löschen von Daten im darunterliegenden DataSet.<br>
    Lösungsansatz:<br>
    Die Idee war jede Komponente mit einem Interface zu versehen, daß die benötigte Funktionalität bereitstellt. Jetzt wäre es möglich gewesen per QueryInterface das ActiveControl abzufragen, ob es das Interface unterstützt.<br>
    Problem:<br>
    QueryInterface ist in den Komponenten als protected deklariert.<br>
    Warum denn das?<br> Kann man entweder den Interfacezugriff oder das gesamte Problem anders angehen?<br>
    BYE BERND

  • #2
    wo ist denn das Problem? protected heisst doch nur das die Methode nur in abgeleiteten Klassen zugreifbar ist. Schlimmstenfalls muss man mit einem Ableitungstrick zugreifen. "TAbgeleitet = class(TBase);" und mit einem TBase-Objekt "TAbgeleitet(BaseObj).QueryInterface"

    Comment


    • #3
      Hi!<br>
      Erstmal Danke für die beeindruckend schnelle Antwort!!!!<br>
      Das Problem ist, wenn ich (zwei/mehrere/beliebig viele) Klassen habe (z.B. TDBEdit und TDBGrid) muß ich zu jeder Klasse eine abgeleitete Klasse schreiben. Kein Problem aber: Um jetzt eine Funktion aus dem Interface aufrufen zu können muß ich den Typ ActiveControl kennen.<br>
      Damit mache ich mir den Vorteil von Interfaces und QueryInterface aber wieder zunichte.<br>
      Ich würde dann eine Konstruktion brauchen wie:<br>
      var<br>
      classn: string;<br>
      begin<br>
      classn := uppercase ( ActiveControl.classname );<br>
      if classn = 'TMYDBEDIT' then begin<br>
      result := TMYDBEDIT ( ActiveControl );<br>
      exit;<br>
      end;<br>
      if classn = 'TMYDBGRID' then begin<br>
      result := TMYDBGRID ( ActiveControl );<br>
      exit;<br>
      end;<br>
      usw..<br>
      Wenn man jetzt eine weitere Klasse mit dem Interface versehen möchte muß obiger Code wieder erweitert werden.<br>
      Ich muß irgendwie auf QueryInterface draufkommen oder das Ganze anders angehen!<br>
      BYE BERN

      Comment


      • #4
        Ich glaube wir warten mal auf Hagen. Der weiss genauer Bescheid.<br>
        Ansonsten "if ActiveControl is TMyDBEdit then" ist doch etwas einfacher

        Comment

        Working...
        X