AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriff auf andere Konstante als im Source Code angegeben
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf andere Konstante als im Source Code angegeben

Ein Thema von Amateurprofi · begonnen am 26. Sep 2016 · letzter Beitrag vom 27. Sep 2016
 
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.087 Beiträge
 
Delphi XE2 Professional
 
#1

Zugriff auf andere Konstante als im Source Code angegeben

  Alt 26. Sep 2016, 12:07
Ich hatte gestern ein sehr merkwürdiges Erlebnis.

Szenario:

In einer Unit "Base.pas" sind Typen und Konstanten, die ich in meinem Projekt verwende, deklariert.

In anderen Units greife ich auf diese Daten zu.

In Base.pas standen u.A. folgende Konstanten

Code:
const
   MinTone=21;
   MaxTone=108;
   PianoKeyName:Array[MinTone..MaxTone] of String=
      ('A0','Ais0/B0','H0',
       'C1','Cis1/Des1','D1','Dis1/Es1','E1','F1','Fis1/Ges1','G1','Gis1/As1','A1','Ais1/B1','H1',
       'C2','Cis2/Des2','D2','Dis2/Es2','E2','F2','Fis2/Ges2','G2','Gis2/As2','A2','Ais2/B2','H2',
       'C3','Cis3/Des3','D3','Dis3/Es3','E3','F3','Fis3/Ges3','G3','Gis3/As3','A3','Ais3/B3','H3',
       'C4','Cis4/Des4','D4','Dis4/Es4','E4','F4','Fis4/Ges4','G4','Gis4/As4','A4','Ais4/B4','H4',
       'C5','Cis5/Des5','D5','Dis5/Es5','E5','F5','Fis5/Ges5','G5','Gis5/As5','A5','Ais5/B5','H5',
       'C6','Cis6/Des6','D6','Dis6/Es6','E6','F6','Fis6/Ges6','G6','Gis6/As6','A6','Ais6/B6','H6',
       'C7','Cis7/Des7','D7','Dis7/Es7','E7','F7','Fis7/Ges7','G7','Gis7/As7','A7','Ais7/B7','H7',
       'C8');
Auf "PianoKeyName" wird an verschiedenen Stellen zugegriffen.

Nun wollte ich für eine neue Funktionalität nicht die Texte "Cis1/Des1" etc. verwenden, sondern statt dessen "Cis1".

Also habe ich per Copy/Paste eine Kopie von "PianoKeyName" erstellt und die ursprüngliche Konstante umbenannt in "PianoKeyLongName" .
An den Stellen, an denen auf " PianoKeyName" zugegriffen wurde, habe ich die gleiche Umbenennung vorgenommen.

In "PianoKeyName" habe ich dann mit der Maus mit gedrückter Alt-Taste "/Des1" bis "/Des7" markiert und mit der Delete-Taste entfernt. Das gleiche für die anderen Spalten "/Es11" bist "/B1".

Jetzt hatte ich also folgende Deklarationen:

Code:
   PianoKeyLongName:Array[MinTone..MaxTone] of String=
      ('A0','Ais0/B0','H0',
       'C1','Cis1/Des1','D1','Dis1/Es1','E1','F1','Fis1/Ges1','G1','Gis1/As1','A1','Ais1/B1','H1',
       'C2','Cis2/Des2','D2','Dis2/Es2','E2','F2','Fis2/Ges2','G2','Gis2/As2','A2','Ais2/B2','H2',
       'C3','Cis3/Des3','D3','Dis3/Es3','E3','F3','Fis3/Ges3','G3','Gis3/As3','A3','Ais3/B3','H3',
       'C4','Cis4/Des4','D4','Dis4/Es4','E4','F4','Fis4/Ges4','G4','Gis4/As4','A4','Ais4/B4','H4',
       'C5','Cis5/Des5','D5','Dis5/Es5','E5','F5','Fis5/Ges5','G5','Gis5/As5','A5','Ais5/B5','H5',
       'C6','Cis6/Des6','D6','Dis6/Es6','E6','F6','Fis6/Ges6','G6','Gis6/As6','A6','Ais6/B6','H6',
       'C7','Cis7/Des7','D7','Dis7/Es7','E7','F7','Fis7/Ges7','G7','Gis7/As7','A7','Ais7/B7','H7',
       'C8');

   PianoKeyName:Array[MinTone..MaxTone] of String=
      ('A0','B0','H0',
       'C1','Cis1','D1','Dis1','E1','F1','Fis1','G1','Gis1','A1','Ais1','H1',
       'C2','Cis2','D2','Dis2','E2','F2','Fis2','G2','Gis2','A2','Ais2','H2',
       'C3','Cis3','D3','Dis3','E3','F3','Fis3','G3','Gis3','A3','Ais3','H3',
       'C4','Cis4','D4','Dis4','E4','F4','Fis4','G4','Gis4','A4','Ais4','H4',
       'C5','Cis5','D5','Dis5','E5','F5','Fis5','G5','Gis5','A5','Ais5','H5',
       'C6','Cis6','D6','Dis6','E6','F6','Fis6','G6','Gis6','A6','Ais6','H6',
       'C7','Cis7','D7','Dis7','E7','F7','Fis7','G7','Gis7','A7','Ais7','H7',
       'C8');
In der neu geschriebenen Prozedur, stand dann z.B.
Label1.Caption:=PianoKeyName[25]; Im Label stand dann aber nicht der Text aus "PianoKeyName" sondern der längere Text aus "PianoKeyLongName".
Im DebugMode zeigte Insight, das auf "PianoKeyName" zugegriffen wird, tatsächlich wurde aber auf "PianoKeyLongName" zugegriffen.

Alle Versuche, das zu beheben scheiterten.
Delphi schließen, alle .dcu Dateien löschen Delphi neu starten brachte nichts.
Anderes Projekt laden Delphi schließen, neu starten und dann das Projekt laden, brachte nichts.
Rechner komplett runterfahren brachte nichts.
Die Konstante "PianoKeyName" aus der Unit Base.pas entfernen und in die Unit zu stellen, in der ich darauf zugreifen wollte führte zu einer Exception. (Irgend etwas mit Speicherzugriff).
Auch das Löschen von "PianoKeyLongName" brachte nichts. Es wurde weiterhin auf diese nicht mehr existierende Konstante zugegriffen.

Ich habe dann den gesamten Inhalt aus Base.pas in einen Texteditor kopiert. Base.pas und Base.dcu gelöscht, eine neue Unit erstellt, den Text aus dem Texteditor in die neue Unit kopiert und diese unter Base.pas gespeichert.
Danach funktionierte alles, wie es sollte.

Und nach dieser langen Vorrede die kurzen Fragen:
Woran kann das liegen. (Vermutung: Die Methode wie ich die Texte gelöscht habe)
Wie gehe ich am besten vor, wenn solche Fehler wieder auftreten?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
 


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 16:43 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 by Thomas Breitkreuz