AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokale Konstanten in D2009 begrenzt?

Ein Thema von hanspeter · begonnen am 8. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
Seite 3 von 3     123   
Thomas Horstmann

Registriert seit: 25. Apr 2007
Ort: NRW
87 Beiträge
 
Delphi 12 Athens
 
#21

Re: Lokale Konstanten in D2009 begrenzt?

  Alt 13. Jan 2009, 10:00
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#22

Re: Lokale Konstanten in D2009 begrenzt?

  Alt 13. Jan 2009, 11:12
Zitat von Thomas Horstmann:
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
Danke, das ist gut möglich möglich.

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#23

Re: Lokale Konstanten in D2009 begrenzt?

  Alt 13. Jan 2009, 11:46
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:
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.
[add]
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
Miniaturansicht angehängter Grafiken
unbenannt_101.png  
Angehängte Dateien
Dateityp: 7z project1_953.7z (1,9 KB, 0x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 19:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz