Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Properties haben nach Zuweisung falsche Werte (https://www.delphipraxis.net/182495-properties-haben-nach-zuweisung-falsche-werte.html)

BlueStarHH 29. Okt 2014 14:18

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1277843)
Zitat:

Zitat von BlueStarHH (Beitrag 1277832)
Delphi-Quellcode:
function TForm1.GetDebitorName: string;
begin
  Result := GetReAdr.Vorname + ' ' + GetReAdr.Name;
end;

Durch den zweimaligen Aufruf von GetReAdr wird der Code innerhalb von GetReAdr auch zweimal ausgeführt. Ist das so beabsichtigt?

Das stört nicht. Siehe Post #6. Dort ist ein Abfrage, verhindert das Zeitaufwändiger Code bei jedem Aufruf ausgeführt wird.

BlueStarHH 29. Okt 2014 14:19

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von hoika (Beitrag 1277840)
Hallo,

vielleicht liefert ja dein
Query.HoleAufwändigDatenAb;

was falsches ab?

Breakpoint + Watchpoint drauf.

du kannst auch eine Set-Methode für VorName schreiben
und dort einen bedingten Breakpoint setzen, wenn 'b' übergeben wird.

Ausserdem auch hier einen Breakpoint setzen
procedure TAdresse.Assign(Source: TPersistent);

Vielleicht überschreibst du auch irgendwo Speicher -> FastMM4 benutzen.


Heiko

Das ist alles OK. Alles mit Breakpoint & co geprüft. Exakt das kleine Beispiel aus Post 1 funktioniert nicht. Kannst Du Dir in ein Form kopieren und nachvollziehen. Also liegt es nicht am SQL.

BlueStarHH 29. Okt 2014 14:21

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von himitsu (Beitrag 1277867)
Zitat:

Zitat von mkinzler (Beitrag 1277833)
Es ist nie eine gute Idee in Methoden auf globale Variablen zuzugreifen.

Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin
  Result.Vorname := 'a';
  Result.Name := 'b';
end;

Sein Code war schon fast richtig, denn er "wollte" die Instanz zurückgeben, welche er in TForm1 deklatiert/erstellt hat.
Aber er hat nicht auf seinen Compiler gehört, welcher ihm bestimmt was vonwegen "Result ist nicht initialisiert" um die Ohren wirft! :roll:


[edit] :gruebel: War das
Delphi-Quellcode:
Result := Adresse;
vorhin auch schon in Post #1 ?
Nja, dein Code war zumindestens falsch, denn Result wurde nicht initialisiert.

Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin
  Result := Adresse;
  Result.Vorname := 'a';
  Result.Name := 'b';
end;

// oder

function TForm1.GetReAdr: TAdresse;
begin
  Adresse.Vorname := 'a';
  Adresse.Name := 'b';
  Result := Adresse;
end;

Result := Adresse; war schon immer in Post #1. Dein Lösungsvorschlag 2 steht genau so im Post #1.

BlueStarHH 29. Okt 2014 14:24

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von himitsu (Beitrag 1277867)
Nja, dein Code war zumindestens falsch, denn Result wurde nicht initialisiert.

Was genau meinst Du damit? Mit Result := Adresse; wird es initialisiert/zugewiesen. Oder sehe ich das falsch?

BlueStarHH 29. Okt 2014 14:30

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von himitsu (Beitrag 1277867)

Delphi-Quellcode:
function TForm1.GetReAdr: TAdresse;
begin
  Result := Adresse;
  Result.Vorname := 'a';
  Result.Name := 'b';
end;

Hab das mal eben ausprobiert: Als Vorname und Name wird dann auch 'b b' zurückgegeben. Klappt also auch nicht. Sehr merkwürdig.

himitsu 29. Okt 2014 14:33

AW: Properties haben nach Zuweisung falsche Werte
 
Zitat:

Zitat von BlueStarHH (Beitrag 1277874)
Zitat:

Zitat von himitsu (Beitrag 1277867)
Nja, dein Code war zumindestens falsch, denn Result wurde nicht initialisiert.

Was genau meinst Du damit? Mit Result := Adresse; wird es initialisiert/zugewiesen. Oder sehe ich das falsch?

Nicht bei Markus in Post #2 :zwinker:

Uwe Raabe 29. Okt 2014 14:39

AW: Properties haben nach Zuweisung falsche Werte
 
Ich kann das hier (XE7) reproduzieren. Es handelt sich offenbar um einen Compiler-Fehler.

Delphi-Quellcode:
var
  sn: string;
  sv: string;
begin
  sv := GetReAdr.Vorname;
  sn := GetReAdr.Name;
  result := sv + ' ' + sn;
  Result := GetReAdr.Vorname + ' ' + GetReAdr.Name;
end;
Das erste result bringt noch das richtige Ergebnis, aber beim zweiten klappts nicht.

Dejan Vu 29. Okt 2014 14:41

AW: Properties haben nach Zuweisung falsche Werte
 
Ich kann es mit D6 auch bestätigen.

Jumpy 29. Okt 2014 14:52

AW: Properties haben nach Zuweisung falsche Werte
 
Ist .Name vllt. ein reserviertes Wort in dem Zusammenhang? Zumindest wird es ja hier im Codeformatierer der DP fett blau gezeigt?

DeddyH 29. Okt 2014 15:02

AW: Properties haben nach Zuweisung falsche Werte
 
Es funktioniert auch, wenn man die Adresse in einer lokalen Variablen zwischenspeichert.
Delphi-Quellcode:
function TForm1.GetDebitorName: string;
var
  a: TAdresse;
begin
  a := GetReAdr;
  Result := a.Vorname + ' ' + a.Name;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.
Seite 2 von 5     12 34     Letzte »    

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