AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TClientSocket auf Datenmodul
Thema durchsuchen
Ansicht
Themen-Optionen

TClientSocket auf Datenmodul

Ein Thema von Jens Hartmann · begonnen am 23. Jan 2012 · letzter Beitrag vom 25. Jan 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 06:59
Guten Morgen zusammen,

ich habe ein eher seltsames Problem mit meinem Delphi XE2. Ich möchte eine Komponente TClientSocket auf einem Datenmodul plazieren.
(TClientSocket und TServerSocket zuvor natürlich nachinstalliert).

Ziehe ich die Komponente direkt auf eine Form, funktioniert das. Will ich die Komponente auf ein Datenmodul legen, kann ich Sie in der Toolpalette nicht finden.

Lege ich die TClientSocket auf eine Form, kopiere die Kompo und füge Sie im Datenmodul ein, kommt die Fehlermeldung

"Klasse TClientSocket nicht gefunden"

Kennt das Problem jemand?

Vorab Danke und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 07:30
Workaround: Im DataModuleCreate instantiieren.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 19:07
Zitat von Furtbichler:
Workaround: Im DataModuleCreate instantiieren.
Versteh ich um ehrlich zu sein nicht. Auch Google ist hier scheinbar nicht mein Freund.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 19:18
Delphi-Quellcode:
Procedure TMyDataModule.DataModuleCreate(Sender : TOBject);
Begin
  MyClientDataset := TClientDataset.Create(Nil);
  MyClientDataset..... // Properties setzen
end;

Procedure TMyDataModule.DataModuleDestroy(Sender : TObject);
Begin
  MyClientDataset.Free;
End;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 19:27
und warum nicht einfach
Delphi-Quellcode:
Procedure TMyDataModule.DataModuleCreate(Sender : TOBject);
Begin
  MyClientDataset := TClientDataset.Create( Self );
  MyClientDataset..... // Properties setzen
end;
Dann kümmert sich das DataModul selber um die Freigabe

Beobachtet habe ich das auch schon und als Workaround probier mal folgendes aus:
  1. Ziehe auf ein Formular die gewünschte Komponente
  2. Die Komponente von der Form auswählen und mit STRG-X ausschneiden
  3. Auf das DatenModul wechseln und mit STRG-V dort einfügen
  4. Alles speichern
Jetzt sollten auch alle nicht-visuellen Komponenten auswählbar sein
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 20:29
und warum nicht einfach
Delphi-Quellcode:
Procedure TMyDataModule.DataModuleCreate(Sender : TOBject);
Begin
  MyClientDataset := TClientDataset.Create( Self );
  MyClientDataset..... // Properties setzen
end;
Dann kümmert sich das DataModul selber um die Freigabe
Das widerspricht dem Designtemplate: "Wer's anfordert, gibts wieder frei". Ansonsten haste Recht.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TClientSocket auf Datenmodul

  Alt 23. Jan 2012, 21:34
und warum nicht einfach
Delphi-Quellcode:
Procedure TMyDataModule.DataModuleCreate(Sender : TOBject);
Begin
  MyClientDataset := TClientDataset.Create( Self );
  MyClientDataset..... // Properties setzen
end;
Dann kümmert sich das DataModul selber um die Freigabe
Das widerspricht dem Designtemplate: "Wer's anfordert, gibts wieder frei". Ansonsten haste Recht.
Hmmm, mal überlegen wer denn jetzt wer ist ... IMHO ist hier "wer" ja die Instanz von TMyDataModule.
Wenn ich also der erzeugten Instanz vom ClientDataSet als Owner die Instanz von TMyDataModule mitgebe, so ist das nicht nur möglich, sondern auch noch in jeder Hinsicht richtig.

Somit sehe ich es hier in diesem (speziellen) Fall keinen Widerspruch zum Designtemplate, denn der übergebene Owner ist auch derjenige, der es angefordert hat
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: TClientSocket auf Datenmodul

  Alt 24. Jan 2012, 06:38
Es geht aus dem Code nicht hervor, das MyClientDataset ordentlich freigegeben wird. Um den Code zu verstehen, muss ich in fremden Code nachschauen, wobei sich hier Probleme ergeben:
* Habe ich den Quelltext? (hat nicht jeder)
* Existiert ein Manual? (ja ja, F1)
* Wird da wirklich etwas freigegeben? (hoffen wir mal)
Ich muss also ganz schöne Klimmzüge anstellen, um zu verifizieren, das das Objekt freigegeben wird. => Unnötige Arbeit => schlecht lesbar => schlecht wartbar.

Das sind nicht gerade Argumente für deine Version (aus Sicht der Lesbarkeit).

Von der Orthogonalität der verwendeten Klassen her hast Du natürlich Recht: "Das wird überall in der VCL so gemacht, der Designer machts auch, also mach ich es auch. Und das ist auch gut so". Ein versierter Leser des Codes, der vorher anderen VCL-Code gelesen hat, wird diese implizite (eigentlich: versteckte) Freigabe erkennen. Wir programmieren aber im Idealfall nicht für Gurus.

Geändert von Furtbichler (24. Jan 2012 um 06:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: TClientSocket auf Datenmodul

  Alt 24. Jan 2012, 07:08
Es geht aus dem Code nicht hervor, das MyClientDataset ordentlich freigegeben wird. Um den Code zu verstehen, muss ich in fremden Code nachschauen, wobei sich hier Probleme ergeben:
* Habe ich den Quelltext? (hat nicht jeder)
* Existiert ein Manual? (ja ja, F1)
* Wird da wirklich etwas freigegeben? (hoffen wir mal)
Ich muss also ganz schöne Klimmzüge anstellen, um zu verifizieren, das das Objekt freigegeben wird. => Unnötige Arbeit => schlecht lesbar => schlecht wartbar.
Eine wesentliche Eigenschaft der Klasse TComponent ist die Owner-Beziehung, die im Wesentlichen u.a. dafür sorgt, dass der Owner einer TComponent-Instanz die Freigabe veranlasst, wenn der Owner freigegeben wird.
Man könnte also fast behaupten, dass ein Großteil der Daseinsberechtigung von TComponent aus diese Owner-Beziehung besteht.
Die Klasse TComponent selbst ist eine der wesentlichen Basis-Komponenten der VCL.

Deiner Argumentation folgend und weitergedacht, dürfte ich auch keine TStrings benutzen, weil ich ja nicht weiß, ob die Strings wirklich gespeichert werden (ich müsste dort auch erst mal den Quelltext sichten, und wenn ich den nicht habe ...)
Eigentlich dürfte ich keine Komponenten verwenden ... alles selber programmieren.

Ein weiteres Kriterium, für die Angabe eines Owners, ist der einfachere Zugriff auf die Komponenten über das Components-Array des Owners.
Dieses funktioniert aber nur, wenn ich den Owner bei der Instanz-Erzeugung mit angebe.
Und wenn ich den Owner angebe, dann habe ich - as designed - die Verantwortung für die Freigabe delegiert, an den Owner.

Wer dieses dann im Code nicht versteht, der sollte sich auch den Gefallen tun und den Editor ganz schnell wieder schließen, denn es fehlen die existentiellen Grundlagen für die VCL.

@all: Wenn diese Diskussion hier nervt, dann nur Bescheid geben - wir führen dies dann per PN weiter
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: TClientSocket auf Datenmodul

  Alt 24. Jan 2012, 07:37
Ich sagte ja bereits, das man das so schreiben kann, wenn man unterstellt, das der Leser die VCL und ihre Eigenheiten kennt.
Deiner Argumentation folgend und weitergedacht, dürfte ich auch keine TStrings benutzen, weil ich ja nicht weiß, ob die Strings wirklich gespeichert werden
Das ist nicht weitergedacht, sondern um-die-Ecke-gedacht, denn: Die Funktionalität einer Klasse ist etwas anderes als ihre Seiteneffekte. Und die Tatsache, das ein TComponent-Derivat vom Owner freigegeben wird, ist ein nicht im Code dokumentierter Seiteneffekt (ja gut'eh, Seiteneffekte sind vom Wesen her nicht dokumentiert).
Zitat:
...Wer dieses dann im Code nicht versteht, der sollte .. den Editor ganz schnell wieder schließen...
So kann man sich auch aus der Affäre ziehen.

So, wenn man die sinnvollen Argumente mal gegenüberstellt, dann ergibt sich das gleiche Bild wie eben (imho):
Einerseits (ohne Owner) eine bessere Lesbarkeit für Leute, die die VCL nicht in- und auswendig kennen (also mich z.B. ), andererseits eine im Design der VCL verankerte Verwendung (mit Angabe des Owners) mit praktischen Vorteilen.

Hier ist es imho blöd, das man entweder das eine, oder das andere bekommt, aber nicht beides. Obwohl....

Was passiert, wenn ich MyClientDataset freigebe? Sagt es dem Owner nicht: "Schmeiss mich aus deiner Liste raus"?

Dann könnte ich ja den Owner mit angeben und (wenn ich denn unbedingt will) das Objekt trotzdem explizit freigeben. Damit könnte man die Diskussion im Konsens schließen und sich wieder der Programmierung von diesem dusseligen Suchdingsda widmen, das sowieso keiner braucht. Wie hast Du das doch gleich genannt? "Gugl"?

Geändert von Furtbichler (24. Jan 2012 um 07:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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