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 1 von 2  1 2      
Blup

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

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 16: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 16:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

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

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17: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
259 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17: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
259 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:02
Wenn ein String-Parameter innerhalb der Methode nicht verändert werden soll, vereinbart man den am besten als "const"-Paramter. ... Für die Rückgabe kann man zwar "var"-Parameter verwenden, aber eigentlich sollten es hier "out"-Parameter sein.
Blöde gefragt - demzufolge sollte man immer entweder const, out oder var in den Methodenkopf schreiben ? Und "schlichte"
procedure IchTuWas(XYZ: String); gar nicht schreiben ?

Wie dem auch sei - das habe ich entsprechend umgesetzt und alle Aufrufe entsprechend gemacht.
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:28
Mit der Angabe von Const kann der Parameter auch innerhalb der Procedure/Function nicht verändert werden. Außerdem kann der Compiler besser optimieren.

Etwas ausführlicher:
Delphi-Hilfe
Peter

Geändert von Jasocul ( 7. Jun 2017 um 08:34 Uhr)
  Mit Zitat antworten Zitat
H.Bothur

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:58
So .. ganz viele Anworten auf einmal

Benutzt Du sonst irgendwo Application.ProcessMessages?
Nee ... nutze ich nicht.

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 und wenn ich entsprechende Stop-Punkte setze. Das mache ich dann immer so:

Delphi-Quellcode:
if KundenNummer = '12652then
begin
  beep;
end;
Sicher, dass sich der Inhalt ändert, oder zeigt der Debugger nur nicht mehr das Richtige an?
Inhalt manuell irgendwo ausgeben (Logdatei, ShowMessage, ...)
Hab ich gemacht - steht aber leider auch der falsche Wert

Einzige Ausnahme für das NIEMALS: BufferOverflow oder Dergleichen. Danach sieht es in dem gezeigten Code aber auch nicht aus.
du hast ein massives Speicherproblem und jemand (du) überschreibt irgendwo willkürlich deinen RAM. (aber schon komisch, dass dabei rein zufällig ein "korrekter" String mit einer schönen "Nummer" als Text entsteht)
Ich gehe ja auch davon aus ... wobei ich nicht weiß wieso. Aber ich gebe Dir recht das ich das auch komisch finde und immer noch glaube das ich da unwillkürlich einen Overflow generiere der nur keine Exception auslöst. ... ODER ... ich mache schon vorher massiven Murks - was ja auch nicht unwahrscheinlich ist.

Was ich auch noch nicht verstehe ... und vielleicht ergibt das ja den BufferOverflow ... eigentlich dürfte diese Zeile hier gar nicht funktionieren sondern müsste - wenn ich mich nicht täusche - eine Exception auslösen:

MahnForm.OPTabelleSG.Cells[CKundenNummer, MahnForm.OPTabelleSG.RowCount] := Copy(EinleseZeile, 1, Position -1);
Ich kann doch gar nicht in Cells.[1, Grid.RowCount] schreiben ... es müsste eigentlich doch Cells.[1, Grid.RowCount -1] heißen, oder ? Aber warum wird dann keine Exception ausgelöst ??

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

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:59
Ich werde jetzt drei Sachen umsetzen:

1) wo möglich const- und out-Parameter nutzen
2) Die eine Schleife von RowCount auf RowCount -1 setzen
3) Versuchen die TKunden. usw. rausnehmen.

Ich melde mich was dann passiert.

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 09:12
Ich kann doch gar nicht in Cells.[1, Grid.RowCount] schreiben ... es müsste eigentlich doch Cells.[1, Grid.RowCount -1] heißen, oder ? Aber warum wird dann keine Exception ausgelöst ??
An des Phänomen kann ich mich erinnern. Das geht tatsächlich ohne Exception!
Habe gerade mal eine Mini-Test-Anwendung gebastelt. Es war völlig unproblematisch "außerhalb" des StringGrids Einträge zu machen. Werden natürlich nicht angezeigt.
Peter
  Mit Zitat antworten Zitat
H.Bothur

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 09:24
Ich kann doch gar nicht in Cells.[1, Grid.RowCount] schreiben ... es müsste eigentlich doch Cells.[1, Grid.RowCount -1] heißen, oder ? Aber warum wird dann keine Exception ausgelöst ??
An des Phänomen kann ich mich erinnern. Das geht tatsächlich ohne Exception!
Habe gerade mal eine Mini-Test-Anwendung gebastelt. Es war völlig unproblematisch "außerhalb" des StringGrids Einträge zu machen. Werden natürlich nicht angezeigt.
Komisch - gibt es denn den Speicherbereich dann schon oder wird das "wild" irgendwohin geschrieben ??

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

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 09:25
Aktueller Status: es scheint zu funktionieren ... wir testen das mal weiter und ich melde mich dann noch mal !

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  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 14:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz