![]() |
Re: Lokale Konstanten in D2009 begrenzt?
Hallo,
ich hatte das gleiche Problem. Das scheint nicht an der Länge der Konstanten, sondern der Anzahl pro Prozedur/Funktion zu liegen (warum auch immer). Nachdem ich die ca. 800 Konstanten (ResourceStrings) auf ca. 15 Prozeduren aufgeteilt hatte, lief es wieder. Viele Grüße :stupid: |
Re: Lokale Konstanten in D2009 begrenzt?
Zitat:
Ich rufe die gleiche Procedure mit den Konstanten x mal auf. Es handelt sich ja um das Erzeugen einer Datenbank. Alle Tabellen,Trigger und Stored procedure sind als Konstante definiert. In einer Procedure "CreateDatabase" rufe ich dann eine Procedure EXECSQL(Anweisung) x mal auf. Ich werde diese Aufrufe mal auf mehrere Procedure verteilen. Wäre aber eine arge Einschränkung. Gruß Peter |
Re: Lokale Konstanten in D2009 begrenzt?
Liste der Anhänge anzeigen (Anzahl: 2)
Eine QuellCodeZeile kann locker 1000 Zeichen lang sein (genauer gesagt maximal 1024 Zeichen)
Eine Stringkonstante Stringliterale aber nur maximal 255 Zeichen. Und das ist definitiv so! x = 'abc' + 'def' X ist hier erstmal nur ein String aus 2 StringkonstantenStringliteralen, aber ich hab es gerade mal getestet diese Längenbegränzungen gibt es immernoch, aber in Delphi 2009 ist ein Fehler enthalten, denn es wird nur ine Fehlermeldung ausgegeben, wenn der String genau 256 Zeichen lang ist, bei mehr gibt es keinen Fehler (es läßt sich problemlos kompilieren), ABER der String ist leer (sowohl bei lokalen, als auch globalen Konstanten) Auszug aus Unit1.pas (Ausgabe für D2009 siehe Bilderanhang) einzelne Stringkonstantenlängen lassen sich via {$DEFINE... deaktivieren
Delphi-Quellcode:
[add]
unit Unit1;
interface ... implementation {$R *.dfm} // a = 6 Zeichen // b = 254 Zeichen // c = 255 Zeichen // d = 256 Zeichen hier gibt es immer eine Fehlermeldung // e = 257 Zeichen ab hier gibts bis D2006 eine Fehlermeldung // (in D2007 konnte ich nicht testen) // in D2009 nicht mehr, aber dafür ist der String dort leer // f = 258 Zeichen // g = 259 Zeichen // h = 40.000 Zeichen á 500 Zeichen pro Stringliteral // i = 40.000 Zeichen á 200 Zeichen pro Stringliteral {.$DEFINE DDD} // d {$DEFINE EFGH} // e f g h const a = 'abc' + 'def'; b = 'a234567890123...01234'; c = 'b234567890123...012345'; {$IFDEF DDD} d = 'c234567890123...0123456'; {$ENDIF} {$IFDEF EFGH} e = 'd234567890123...01234567'; f = 'e234567890123...012345678'; g = 'f234567890123...0123456789'; h = 'aa34567890123... + 'ba34567890123... ... + 'td34567890123...01234567890'; {$ENDIF} i = 'ae34567890123... + 'be34567890123... ... + 'tn34567890123...01234567890'; procedure TForm1.FormCreate(Sender: TObject); begin Label1.Caption := Format('a %d', [Length(a)]); Label2.Caption := a; Label3.Caption := Format('b %d', [Length(b)]); Label4.Caption := Format('%s...', [Copy(b, 1, 10)]); Label5.Caption := b; Label6.Caption := Format('c %d', [Length(c)]); Label7.Caption := Format('%s...', [Copy(c, 1, 10)]); Label8.Caption := c; {$IFDEF DDD} Label9.Caption := Format('d %d', [Length(d)]); Label10.Caption := Format('%s...', [Copy(d, 1, 10)]); Label11.Caption := d; {$ELSE} Label9.Caption := 'd (nicht definiert)'; Label10.Caption := ''; Label11.Caption := ''; {$ENDIF} {$IFDEF EFGH} Label12.Caption := Format('e %d', [Length(e)]); Label13.Caption := Format('%s...', [Copy(e, 1, 10)]); Label14.Caption := e; Label15.Caption := Format('f %d', [Length(f)]); Label16.Caption := Format('%s...', [Copy(f, 1, 10)]); Label17.Caption := f; Label18.Caption := Format('g %d', [Length(g)]); Label19.Caption := Format('%s...', [Copy(g, 1, 10)]); Label20.Caption := g; Label21.Caption := Format('h %d', [Length(h)]); Label22.Caption := Format('%s...', [Copy(h, 1, 10)]); Label23.Caption := h; {$ELSE} Label12.Caption := 'e (nicht definiert)'; Label13.Caption := ''; Label14.Caption := ''; Label15.Caption := 'f (nicht definiert)'; Label16.Caption := ''; Label17.Caption := ''; Label18.Caption := 'g (nicht definiert)'; Label19.Caption := ''; Label20.Caption := ''; Label21.Caption := 'h (nicht definiert)'; Label22.Caption := ''; Label23.Caption := ''; {$ENDIF} Label24.Caption := Format('i %d', [Length(i)]); Label25.Caption := Format('%s...', [Copy(i, 1, 10)]); Label26.Caption := i; end; end. bei ResourceStrings mußt du auch aufpassen, denn diese sind ebenfalls begrenzt ... da sie ja in nummerrierten Tabellen liegen und die Anzahl IDs für dieser StringResourceTabellen nicht unbegrenzt ist [add2] ok, mit den Namen muß ich aufpassen ... einzelne "Stringliterale" dürfen maximal 255 Zeichen lang sein ... die gesamte Konstante wohl fast unbegrenzt |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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