AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Änderung einer Variablen bewirkt Änderung des Feldinhalts

Änderung einer Variablen bewirkt Änderung des Feldinhalts

Ein Thema von roadrunner-S51 · begonnen am 15. Mai 2013 · letzter Beitrag vom 15. Mai 2013
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:24
Kannst du die relevanten Codeschnipsel posten, vielleicht fällt mir ja was auf, denn wenn Du an irgendeine Speichergrenze stoßen solltest, müsste das eher einen "out of memory"-Fehler verursachen und keine falschen Inhalte liefern.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:27
Also der Fehler tritt an der folgenden Stelle auf:
Delphi-Quellcode:
for i := 0 to Zaehlung - 1 do
  begin
    AusFeld[i].iSchrank := FeldPlatz[i].SchrankNr;
    AusFeld[i].iAusschub := FeldPlatz[i].AusschubNr;
    AusFeld[i].iFach := FeldPlatz[i].FachNr;
    AusFeld[i].iTuete := FeldPlatz[i].PackNr;
    AusFeld[i].iStueckTuete := FeldPlatz[i].Stueck;
    AusFeld[i].Datum := FeldPlatz[i].Datum;

    // In diesem Abschnitt tritt der Fehler auf 14.05.2013
    if (AusFeld[i].iFach >= 0) and (AusFeld[i].iFach < 10) then
      sHelp1 := '000' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 9) and (AusFeld[i].iFach < 100) then
      sHelp1 := '00' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 99) and (AusFeld[i].iFach < 1000) then
      sHelp1 := '0' + IntToStr(AusFeld[i].iFach);
    if AusFeld[i].iFach > 999 then
      sHelp1 := IntToStr(AusFeld[i].iFach);

    if (AusFeld[i].iTuete >= 0) and (AusFeld[i].iTuete < 10) then
      sHelp2 := '0000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 9) and (AusFeld[i].iTuete < 100) then
      sHelp2 := '000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 99) and (AusFeld[i].iTuete < 1000) then
      sHelp2 := '00' + IntToStr(AusFeld[i].iTuete);
    if AusFeld[i].iTuete > 9999 then
      sHelp2 := IntToStr(AusFeld[i].iTuete);
    AusFeld[i].Barcode := sHelp1 + sHelp2;
  end;
Dabei ist "Zählung" die Größe des Feldes "AusFeld", mit welchem hier gearbeitet wird. Die Strings sind lokale Variablen. Das große Feld, welches ich in einem vorherigen Post erwähnte, Name "Speicher", wird hier nicht verwendet, aber dennoch verändert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:58
Aus diesem Block solltest Du eigentlich
Delphi-Quellcode:
    if (AusFeld[i].iFach >= 0) and (AusFeld[i].iFach < 10) then
      sHelp1 := '000' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 9) and (AusFeld[i].iFach < 100) then
      sHelp1 := '00' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 99) and (AusFeld[i].iFach < 1000) then
      sHelp1 := '0' + IntToStr(AusFeld[i].iFach);
    if AusFeld[i].iFach > 999 then
      sHelp1 := IntToStr(AusFeld[i].iFach);

    if (AusFeld[i].iTuete >= 0) and (AusFeld[i].iTuete < 10) then
      sHelp2 := '0000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 9) and (AusFeld[i].iTuete < 100) then
      sHelp2 := '000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 99) and (AusFeld[i].iTuete < 1000) then
      sHelp2 := '00' + IntToStr(AusFeld[i].iTuete);
    if AusFeld[i].iTuete > 9999 then
      sHelp2 := IntToStr(AusFeld[i].iTuete);
    AusFeld[i].Barcode := sHelp1 + sHelp2;
AusFeld[i].Barcode := Format('%0.5d%0.5d',[AusFeld[i].iFach,AusFeld[i].iTuete]); machen können.
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.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:14
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.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:21
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!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:25
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.
Jaja, dass kenne ich doch irgendwo her, geänderte Daten, geänderte Fehlerposition. Im Quelltext was geändert, Fehler ein bisserl früher oder später... Da sucht man sich 'nen Wolf.

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 AusFeld[i].Barcode zugreifst, könntest Du ja auch das Format('%0.5d%0.5d',[AusFeld[i].iFach,AusFeld[i].iTuete]) verwenden. Spart Dir im Array den String, egal wie Du ihn auch definieren magst.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:28
@ 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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:32
Dann ist speichern sinnvoller.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:29
Hast du einmal Bereichsüberprüfung zur Laufzeit eingeschaltet (ist zumindest in meinem RAD Studio XE2 in der Debug-Konfiguration komischerweise standardmäßig aus)? Vielleicht geht ja da etwas über den Index hinaus und verändert Daten in Strukturen, die zufälligerweise im Speicher direkt daneben liegen...
Angehängte Grafiken
Dateityp: png Projektoptionen.png (54,6 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#10

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:33
Ändert sich hiermit etwas?
for i := Low(AusFeld) to High(AusFeld) do
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:46 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