AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable ist plötzlich anders

Ein Thema von H.Bothur · begonnen am 6. Jun 2017 · letzter Beitrag vom 7. Jun 2017
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17:55
Delphi-Quellcode:
type
  TUKunden = class(TForm)
  .....
  private
    FKundennummer: string;
    procedure SetKundennummer(const AValue: string);
  public
    property Kundennummer read FKundennummer write SetKundennummer;
  end;

implementation

.....

procedure TUKunden.SetKundennummer(const AValue: string);
begin
  FKundenummer := AValue; // BREAKPOINT HIER SETZEN
end;
Vor dem eigentlichen Aufruf von FirstKundenSuchen dem property Kundennummer den zu suchenden Wert zuweisen und es dann als Parameter mitgeben. Sollte irgendein Event oder Thread die Kundennummer einstweilen verändern, dann stehst Du beim Breakpoint und kannst den Callstack untersuchen.

HTH (hope that helps)
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#12

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17:57
Wenn ein String-Paramerter innerhalb der Methode nicht verändert werden soll, vereinbart man den am besten als "const"-Paramter.
Delphi-Quellcode:
FirstKundenSuchen(const KundenNummer: String{ ...})
.
Für die Rückgabe kann man zwar "var"-Parameter verwenden, aber eigentlich sollten es hier "out"-Parameter sein.
"var" bedeuted die Parameter müssen auch vor dem Aufruf sinnvoll belegt sein, da die vorherigen Werte intern benötigt werden.
"out" den Parameter-Variablen muss vor dem Aufruf nichts zugewiesen werden.

Die ganzen Rückgabewerte gehören doch zusammen und bilden ein fachliches Object. Warum dann nicht auch eine Klasse benutzen oder zumindst einen Record?
Delphi-Quellcode:
type
  TKundeRec = record
    Nummer,
    Name1,
    Name2,
    Strasse,
    Land,
    PLZ,
    Ort,
    Telefax,
    Email,
    Vertreter,
    RnEmail: String
  end;

  procedure TUKunden.FirstKundenSuchen(const KundenNummer: String; out Kunde: TKundeRec);
  {oder}
  function TUKunden.FirstKundenSuchen(const KundenNummer: String): TKundeRec;
Deine Klasse heist "TUKunden" und hat direkten Zugriff auf alle internen Felder und Objekte.
Die Variable "UKunden" ist vermutlich eine globale Variable die dich innerhalb der Klasse überhaupt nicht interessiert.
Streich mal überall in der Methode "UKunden.", dann wird das etwas übersichlicher und eine Fehlerquelle ausgeschlossen.

Hast du die Optimierung für das Compilieren angeschalten? Das sollte man nicht wenn man debuggen will.
Das Programm läuft zwar normal, aber der Debugger zeigt dann nicht mehr richtig an.

Vieleicht hast du auch mehrere Variablen die Kundennummer heißen. Eine lokal in der Methode und eine weitere in der Klasse.

Geändert von Blup ( 6. Jun 2017 um 17:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:01
Wenn ein String-Paramerter innerhalb der Methode nicht verändert werden soll, vereinbart man den am besten als "const"-Paramter.
Vollkommen richtig. Ich fände es nur interessant (und korrigierenswert), zu wissen, was passiert
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:02
Also nochmal gefragt: Du benutzt keinen TThread? (Das wäre ja auch noch ein normales Programm )

Benutzt Du sonst irgendwo Application.ProcessMessages? Das kann den Programmfluss ggf. auch etwas durcheinander bringen (obwohl vermutlich nicht direkt in der beschriebenen Weise).
Nöö TThread nutze ich nicht .. so wie ich programmiere könnte man das wahrscheinlich auch (bis auf das Grid) in TurboPascal 1.0 oder MS-Basic schreiben - sprich erwarte da von mir eigentlich nichts in Richtung Intelligenz !!

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:12
Delphi-Quellcode:
type
  TUKunden = class(TForm)
  .....
  private
    FKundennummer: string;
    procedure SetKundennummer(const AValue: string);
  public
    property Kundennummer read FKundennummer write SetKundennummer;
  end;

implementation

.....

procedure TUKunden.SetKundennummer(const AValue: string);
begin
  FKundenummer := AValue; // BREAKPOINT HIER SETZEN
end;
Vor dem eigentlichen Aufruf von FirstKundenSuchen dem property Kundennummer den zu suchenden Wert zuweisen und es dann als Parameter mitgeben. Sollte irgendein Event oder Thread die Kundennummer einstweilen verändern, dann stehst Du beim Breakpoint und kannst den Callstack untersuchen.

HTH (hope that helps)
Danke - leider noch nicht - wenn ich das so mache dann bekomme ich hier:
    property Kundennummer read FKundennummer write SetKundennummer; [dcc32 Fehler] KundenUnit.pas(22): E2147 Eigenschaft 'Kundennummer' existiert nicht in Basisklasse

Ich habe den Aufruf dann so geändert:
Delphi-Quellcode:
procedure TUKunden.FirstKundenSuchen(KundenNummer: String; var KName1, KName2, KStrasse, KLand, KPLZ, KOrt, KTelefax, KEmail, KVertreter, KRnEmail: String);
begin
  FKundenNummer := KundenNummer
  1Suche(KundenNummer: String; var KName1, KName2, KStrasse, KLand, KPLZ, KOrt, KTelefax, KEmail, KVertreter, KRnEmail: String);
end;
Ist jetzt zwar etwas krampfig - aber geht das dann so ??

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#16

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:17
Delphi-Quellcode:
 if (KundenNummer = UKunden.KundenSpeicherSG.Cells[CKundenNr, i]) then [COLOR="Red"]// <- hier wird nach Kundennummer 12652 gesucht[/COLOR]
    begin
      if (UKunden.KundenSpeicherSG.Cells[CKundenRNAnschrift, i] = (UKunden.KundenSpeicherSG.Cells[CKundenLfdNr, i])) then [COLOR="Red"]// -< und hier ist der Inhalt von KundenNummer plötzlich 14109[/COLOR]
bzgl: <- hier wird nach Kundennummer 12652 gesucht
das verstehe ich ja noch, da du "Kundennummer" vergleichst

bzgl: -< und hier ist der Inhalt von KundenNummer plötzlich
das verstehe ich nicht. Wie kann "Kundenummer" in einer Zeile plötzlich einen anderen Wert haben, wenn du "Kundennummer" gar nicht vergleichst?
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#17

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:22
Kann es sein, dass in der Basisklasse "KundenNummer" einen Getter hat, der den Inhalt verändert oder ist Kundennummer selbst eine procedure? Was passiert, wenn du in einer Routine einfach ein paarmal hintereinander "KundenNummer" abfragst, ohne noch was anderes zwischendrin zu machen, ändert sich dann der Rückgabewert auch?
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#18

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:24
Oder zum Test "Kundenummer" im Prozedurkopf einfach mal nach "AKundenNummer123" oder irgendeinen Quatsch umbenennen der definitiv nirgendwo anders existiert.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:26
Wenn ein String-Paramerter innerhalb der Methode nicht verändert werden soll, vereinbart man den am besten als "const"-Paramter.
FirstKundenSuchen(const KundenNummer: String{ ...}) Für die Rückgabe kann man zwar "var"-Parameter verwenden, aber eigentlich sollten es hier "out"-Parameter sein.
"var" bedeuted die Parameter müssen auch vor dem Aufruf sinnvoll belegt sein, da die vorherigen Werte intern benötigt werden.
"out" den Parameter-Variablen muss vor dem Aufruf nichts zugewiesen werden.
Oh ... wieder was gelernt ... das kannte ich noch nicht. bringt aber leider keine Änderung (und immer noch keine Exception)

Die ganzen Rückgabewerte gehören doch zusammen und bilden ein fachliches Object. Warum dann nicht auch eine Klasse benutzen oder zumindst einen Record?
Record bekomme ich hin - Klasse nicht weil ich (trotz mehrerer Anläufe) das Konzept von OOP nicht verstanden habe - und das was ich kann eigentlich für das bisschen was ich mache reicht.

Deine Klasse heist "TUKunden" und hat direkten Zugriff auf alle internen Felder und Objekte.
Die Variable "UKunden" ist vermutlich eine globale Variable die dich innerhalb der Klasse überhaupt nicht interessiert.
Streich mal überall in der Methode "UKunden.", dann wird das etwas übersichlicher und eine Fehlerquelle ausgeschlossen.
OK - das mache ich mal - mal sehen was passiert. Da melde ich mich - allerdings hatte ich ab und zu das Thema das bei bestimmten Sachen das geschrieben werden MUSS

Hast du die Optimierung für das Compilieren angeschalten? Das sollte man nicht wenn man debuggen will.
Das Programm läuft zwar normal, aber der Debugger zeigt dann nicht mehr richtig an.
Nein, habe ich nicht - jedenfalls nicht bewusst. Und debuggen kann ich ja !

Vieleicht hast du auch mehrere Variablen die Kundennummer heißen. Eine lokal in der Methode und eine weitere in der Klasse.
Nein - es gibt wirklich nur einmal diese Variable

Hans

*So - heute gibt es keine Rückmeldung mehr - sonst bekomme ich Ärger mit meiner Regierung
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:27
bzgl: -< und hier ist der Inhalt von KundenNummer plötzlich
das verstehe ich nicht. Wie kann "Kundenummer" in einer Zeile plötzlich einen anderen Wert haben, wenn du "Kundennummer" gar nicht vergleichst?
Das sehe ich im Debugger

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 11:00 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