![]() |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Wie ist
Delphi-Quellcode:
definiert?
AusFeld[i].Barcode := sHelp1 + sHelp2;
Da Du ungarische Notation benutzt (finde ich klasse, hilft beim Lesen und Verstehen von fremden Quelltexten kolossal), gehe ich bei sHelp1 und sHelp2 von String aus. Aber was ist Barcode? Kann es sein, dass zufällig bei Feld 156 der Inhalt von sHelp1 + sHelp2 größer wird, als das, was in Barcode hineinpasst? Es könnte in dem Fall passieren, dass im Speicher quasi über das Ende von Barcode hinausgeschrieben wird und das kann dann irgendwo im Speicher sein. Bitte prüfen (testweise) zur Laufzeit nach, ob sHelp1 + sHelp2 in Barcode hineinpassen, wenn nicht, wirf 'ne Exception oder mache irgendeine andere Fehlerbehandlung... Sollte Barcode ein ShortString sein, dann reichen 256 Byte in sHelp1 + sHelp2 aus, um das Problem zu verursachen. Bei anderen Definitionen von Barcode als String fester Länge o. ä. müssen sHelp1 + sHelp2 in der gemeinsamen Länge zwingend <= der Länge von Barcode sein. Andernfalls kann der von Dir genannte Effekt auftreten. |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Liste der Anhänge anzeigen (Anzahl: 1)
@ Der schöne Günther: Habe die Bereichsprüfung eingeschalten. Bringt keine Meldungen oder Fehler.
@ DeddyH: Da ändert sich leider auch nichts. Habe mal einen Screenshot des Feldinhaltes an der entsprechenden Stelle angefügt. Dort wo die kryptischen Zeichen und Steuerzeichen sind, sollte eigenlich stehen '0'. |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Ein vorheriges FillChar auf das Array[i] könnte auch schon helfen.
|
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Und den running Gag gleich hinterher, "Was für Char/String verwendest Du?"
Zeig doch mal Deine Type und Var Deklarationen. Gruß K-H |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
@ nahpets: Also alle drei Variablen, sHelp1, sHelp2 und AusFeld.Barcode sind als string deklariert. Damit habe ich die volle Länge eines Strings zur Verfügeng, wobei ich das eigentlich garnicht brauche... Ich werde mal versuchen die Strings zu begrenzen. Warum soll ich mehr Platz verwenden als nötig?
Der String-Typ müsste entsprechend meiner Version AnsiString sein. Deklaration: sHelp1 : String; sHelp2 : String; |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Aus diesem Block solltest Du eigentlich
Zitat:
Delphi-Quellcode:
machen können.
AusFeld[i].Barcode := Format('%0.5d%0.5d',[AusFeld[i].iFach,AusFeld[i].iTuete]);
Ein String der Länge 10 sollte damit ausreichen. Mit Strings nicht fester Länge habe ich in Arrays schon häufiger Schwierigkeiten gehabt. Das funktioniert nicht immer sauber, da im Array fester Größe ja dann letztlich irgendwo ein Feld ist, dessen Größe nicht fest ist. |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
So, habe das mal schnell ausprobiert. An besagter Stelle 156 ist das Problem nun weg, dafür tritt es in Element 152 auf. Ich werde nun erstmal die Strings auf die minimal erforderliche Länge kürzen.
|
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
So, ich habe nun alle Strings die ich verwende auf eine definierte Anzahl beschränkt. Damit ist das Problem behoben.
Vielen Dank an alle für die hilfreichen Tipps! |
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
Zitat:
Eventuell könntest Du den String für den Barcode ja auch erst dann aus den beiden Integervariablen per Format zusammenbauen, wenn Du ihn tatsächlich benötigst. Strenggenommen hast Du hier im Array ja eine Redundanz, die nur Speicherplatz belegt. Will meinen: Dort, wo Du (in welcher Form auch immer) lesend auf
Delphi-Quellcode:
zugreifst, könntest Du ja auch das
AusFeld[i].Barcode
Delphi-Quellcode:
verwenden. Spart Dir im Array den String, egal wie Du ihn auch definieren magst.
Format('%0.5d%0.5d',[AusFeld[i].iFach,AusFeld[i].iTuete])
|
AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts
@ nahpets: Ist keine schlechte Idee. Allerdings brauch ich den Barcode an mehrenen Stellen und den jedesmal zu basteln birgt die Gefahr ihn dann irgendwo doch zu vergessen und dann ist wieder Fehlersuche angesagt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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