![]() |
Fehler E2283 beim Übersetzen
Hallo, ich bekomme folgende Fehlermeldung beim Übersetzen:
Zu viele lokale Konstanten. Verwenden Sie kürzere Prozeduren (E2283) Die Hilfe sagt hier folgendes: Eine oder mehrere Ihrer Prozeduren enthält so viele String-Konstanten, dass die interne Speichergrenze des Compilers überschritten wurde. Dieses Problem kann in automatisch generiertem Code auftreten. Kürzen Sie die betreffenden Prozeduren, oder deklarieren Sie Konstanten anstelle der vielen Literale. Weiß jemand, wie die interne Speichergrenze des Compilers ist ? Ich kann leider momentan meinen Code nicht ändern, da ich das Programm so auf die Schnelle nicht umstellen kann. |
Re: Fehler E2283 beim Übersetzen
Zitat:
Wie sieht denn den Code aus ? Wenn die Prozedure mehr als eine Seite hat, dann bis als ZIP anhängen, damit nicht alles vollgemüllt wird. Hoffentlich sieht der Code nicht so aus wie die Strassen von Neapel... |
Re: Fehler E2283 beim Übersetzen
Hallo shmia,
ich benutze Fastreport, aber ohne Datenbank, weil ich aus einem alten DOS-Programm per Export Daten in eine Textdatei schreibe und in FastReport wieder einlese und dann Reports daraus generiere. Dazu benutze ich die Methode GetValue des Reports:
Delphi-Quellcode:
Inzwischen hat die Prozedur aber leider 10000 Zeilen, da die Reports inzwischen sehr umfangreich geworden sind. Zusätzlich gibt es pro Unit 57 solcher Prozeduren, so daß das Programm inzwischen auf ca. 1,4 Mio. Zeilen angewachsen ist und die EXE-Datei auf ca. 32 MB angewachsen ist.
PROCEDURE TReportForm.frxReport1GetValue(CONST VarName: STRING; VAR Value: Variant);
BEGIN IF CompareText(VarName, '1') = 0 THEN Value := MainForm.RegIniFile.ReadString(Datei, '1', '?'); END; Leider habe ich kenen Weg gefunden, mit Fast Report die Dateien mittels einer anderen Methode einzulesen. |
Re: Fehler E2283 beim Übersetzen
Guten Morgen,
hilft es nicht wenn Du das CONST aus der Parameterliste der Prozedur wegläßt.
Delphi-Quellcode:
Nur eine Vermutung.
PROCEDURE TReportForm.frxReport1GetValue(VarName: STRING; VAR Value: Variant);
BEGIN IF CompareText(VarName, '1') = 0 THEN Value := MainForm.RegIniFile.ReadString(Datei, '1', '?'); END; Grüße Klaus |
Re: Fehler E2283 beim Übersetzen
Zitat:
|
Re: Fehler E2283 beim Übersetzen
Och, wir haben eine 134 MB EXE mit der gleichen Anzahl von Codezeilen zusammen. Die Größe ist so oder so egal und sagt nichts aus.
|
Re: Fehler E2283 beim Übersetzen
Zitat:
Delphi-Quellcode:
Wäre gut gewesen, du hättest so ungefähr 3 Zeilen aus GetValue() angegeben, damit man das ganze Elend erkennen kann.
PROCEDURE TReportForm.frxReport1GetValue(CONST VarName: STRING; VAR Value: Variant);
BEGIN IF CompareText(VarName, '1') = 0 THEN Value := MainForm.RegIniFile.ReadString(Datei, '1', '?') else if CompareText(VarName, '2') = 0 THEN Value := MainForm.RegIniFile.ReadString(Datei, '2', '?') else if CompareText(VarName, 'B8') = 0 THEN Value := MainForm.RegIniFile.ReadString(Datei, 'B8', '?') // und hier noch 9997 weitere else Anweisungen END; Also prinzipiell bräuchtest du eine Zuordnung zwischen dem Parameter VarName und dem Name in der Ini-Datei. Diese Zuordnung kann man in einem Konstantenarray ablegen und später über eine For-Schleife auslesen:
Delphi-Quellcode:
type
TListEintrag = record a:string; b:string; end; const liste:array[1..10000] of TListEintrag = ( (a:'1'), (b:'1'), (a:'2'), (b:'2'), (a:'B8'), (b:'B8'), ... ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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