Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt innerhalb Event zuweisen (https://www.delphipraxis.net/84348-objekt-innerhalb-event-zuweisen.html)

Pfoto 15. Jan 2007 19:22


Objekt innerhalb Event zuweisen
 
Hallo zusammen,

ich habe eine Problem, folgenden Fehler zu verstehen:

Nehmen wir an, es gibt unten aufgeführte Event-Methode:

Ich übergebe das Objekt "aJob" und wollte diesem ein anderes
Objekt, das hier gerade erstellt wurde, zuweisen (hier: DBSession)
Das Event geht übriges von "aJob" selbst aus!

Delphi-Quellcode:
procedure TFrmMain.GetDBSession(aJob: TJob);
begin
  aJob.DBSession:= TDBSession.Create;
end;
Warum gibt es hier eine Fehlermeldung?
"aJob" ist doch ein Pointer auf ein Objekt. Warum kann ich
diesem Objekt hier nicht wie üblich etwas zuweisen?


Ich weiß, dass es mit einer solchen Deklarierung funktioniert:
Delphi-Quellcode:
procedure TFrmMain.GetDBSession(var aDBSession: TIDBIntf);
begin
  aDBSession:= TDBSession.Create;
end;

Falls aber jemand weiß, *warum* das so ist, würde ich gerne dazulernen.
Vielleicht ist ja bei obiger Variante nur ein Lese-Zugriff erlaubt etc.


Dank und Gruß
Pfoto

mkinzler 15. Jan 2007 19:25

Re: Objekt innerhalb Event zuweisen
 
Ich Vermute mal Das TJob nicht zu TDBSession kompatibel ist.

Pfoto 15. Jan 2007 19:33

Re: Objekt innerhalb Event zuweisen
 
Zitat:

Zitat von mkinzler
Ich Vermute mal Das TJob nicht zu TDBSession kompatibel ist.

Doch, dafür ist gesorgt.
Ich weise in der zweiten Methode die Variable DBSession später auch TJob zu.

Gruß
Pfoto

mkinzler 15. Jan 2007 19:37

Re: Objekt innerhalb Event zuweisen
 
Was für ein Fehler tritt auf?
Was für ein Event?

Pfoto 15. Jan 2007 19:55

Re: Objekt innerhalb Event zuweisen
 
Zitat:

Zitat von mkinzler
Was für ein Fehler tritt auf?
Was für ein Event?

Es ist ein Event des Jobs selbst.
Dieser soll eine Datenbankverbindung (DBSession) holen.

Da diese Jobs von mehreren Threads ausgeführt werden,
soll jeder Job sich per synchroniziertem Event eine
Instanz von DBSession holen und damit arbeiten.

Ich ging davon aus, dass der Fehler (eine Schreibschutz-
Verletzung) allgemeiner Natur sei, weil ich hier etwa
einen logischen Fehler gemacht habe... (weil man z.B.
nur lesend auf übergebene Objekte zugreifen kann)

Gibt es da etwas in dieser Richtung?

Gruß
Pfoto

mkinzler 15. Jan 2007 20:00

Re: Objekt innerhalb Event zuweisen
 
Meinst du mit Schreibschutzverletzung ne AV? Hast du schon mal versucht durch Debuggen herauszufinden wo der Fehler genau auftritt?

_frank_ 15. Jan 2007 21:35

Re: Objekt innerhalb Event zuweisen
 
evtl. ist der Fehler auch nur daas var?
im ersten fall übergibst du den Parameter als const somit kannst du den Parameter selbst durch die Funktion nicht manipulieren...(Delphi erzeugt eine neue lokal gültige Variable mit gleichen Namen, aber der Parameter selbst wird nicht verändert).

sollte in dem Fall so funktionieren...
Delphi-Quellcode:
procedure TFrmMain.GetDBSession(var aJob: TJob);
begin
  aJob.DBSession:= TDBSession.Create;
end;
HTH Frank

Muetze1 15. Jan 2007 23:40

Re: Objekt innerhalb Event zuweisen
 
... aber da er aJob nicht ändert, braucht er das nicht. Es wird eine Kopie des "Instanzenzeigers" angelegt, aber trotzdem zeigen beide (Aufrufer Variable & Parameter) auf die gleiche Instanz. Daher wäre eine Zuweisung auf die Eigenschaft der Klasse in beiden Fällen ohne Probleme möglich und valid.


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