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 4 von 4   « Erste     234   
H.Bothur

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 09: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
257 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 09: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.355 Beiträge
 
Delphi 11 Alexandria
 
#33

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 10: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
257 Beiträge
 
Delphi 11 Alexandria
 
#34

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 10: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
257 Beiträge
 
Delphi 11 Alexandria
 
#35

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 10: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
SneakyBagels
(Gast)

n/a Beiträge
 
#36

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 10:39
Zitat:
demzufolge sollte man immer entweder const, out oder var in den Methodenkopf schreiben ? Und "schlichte"
Beim Unterbinden von Änderungen innerhalb der Prozedur/Funktion nur const. var und out sind für was anderes.

Zitat:
Mit der Angabe von Const kann der Parameter auch innerhalb der Procedure/Function nicht verändert werden. Außerdem kann der Compiler besser optimieren.
Optimiert der Compiler noch immer so gut, wenn man im Prozedurkopf const verwendet und innerhalb der Prozedur eine neue string-Variable, die man ändern kann?
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 10:54
[QUOTE=SneakyBagels;1373658]
Zitat:
Zitat:
Mit der Angabe von Const kann der Parameter auch innerhalb der Procedure/Function nicht verändert werden. Außerdem kann der Compiler besser optimieren.
Optimiert der Compiler noch immer so gut, wenn man im Prozedurkopf const verwendet und innerhalb der Prozedur eine neue string-Variable, die man ändern kann?
Natürlich. Die Optimierung bezieht sich ja nur auf den Parameter.
Ob das allerdings dann noch was bringt, ist eine andere Frage. Schließlich hast du eine (lokale) Deklaration und eine Zuweisung mehr.

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.
Das habe ich nie überprüft. Mir ist damals nur aufgefallen, dass ich RowCount einfach hochsetzen konnte und dann die Daten sichtbar wurden. Das habe ich gerade auch noch mal in meiner Test-Anwendung gemacht und einfach und die 9999te Zeile was eingetragen und 10000 Zeilen hinzugefügt. Die Daten waren dann sichtbar.
Mir fehlt aber die Zeit, um jetzt genau zu prüfen, was das TStringGrid macht. Das Ganze kann auch Zufall sein, da ich zwischen diesen Vorgängen keinen neuen Speicher für andere Dinge "verbrauche".
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 09:34 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