Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lokale Konstanten in D2009 begrenzt? (https://www.delphipraxis.net/127145-lokale-konstanten-d2009-begrenzt.html)

hanspeter 8. Jan 2009 12:09


Lokale Konstanten in D2009 begrenzt?
 
Hallo,
ich versuche unter D2009 ein Projekt zu kompilieren, welches unter D2007 problemlos funktioniert.

Unter D2009 bricht die Compilierung mit der Fehlermeldung:
"Zuviele lokale Konstanten. Verwenden Sie kürzere Proceduren."
ab.

In der Unit sind allerdings eine Reihe von TextKonstanen declariert.

Die Unit generiert in Firebird eine neue Datenbank und die Tabledefinition ist als Konstante abgelegt.
Wie kann ich den Fehler umgehen?

Für einen Tip dankbar.

Mit Gruß
Peter

fkerber 8. Jan 2009 12:37

Re: Lokale Konstanten in D2009 begrenzt?
 
Hi!

Ich glaube, kürzlich gelesen zu haben, dass die String-Konstanten nicht länger als 255 Zeichen sein dürfen.
Kann es sein, dass das bei dir der Fall ist?


Ciao, Frederic

sakura 8. Jan 2009 12:40

Re: Lokale Konstanten in D2009 begrenzt?
 
Zitat:

Zitat von fkerber
Ich glaube, kürzlich gelesen zu haben, dass die String-Konstanten nicht länger als 255 Zeichen sein dürfen.

Das war aber schon immer so ;)

...:cat:...

hanspeter 8. Jan 2009 12:46

Re: Lokale Konstanten in D2009 begrenzt?
 
Zitat:

Zitat von fkerber
Hi!

Ich glaube, kürzlich gelesen zu haben, dass die String-Konstanten nicht länger als 255 Zeichen sein dürfen.
Kann es sein, dass das bei dir der Fall ist?


Ciao, Frederic

Dann wäre das in D2009 neu.
Der gleiche Quellcode compiliert in D7 bis D2007 problemlos.

Ich habe jetzt probiert. Mit typisierten Konstanten geht es.

Also

Delphi-Quellcode:
TAB_VIDE    = 'Create TABLE VIDEODAT( ARBPLATZ INTEGER NOT NULL primary key,'+
               'STARTSID integer,'+
               'ERGSID  integer,'+
               'PRID    integer,'+
               'ART     CHAR,'+
               'IMAGE   blob sub_type 0 segment size 4096) ';
und Procedure Aufruf . CreateTable(TAB_VIDE);
bringt den beschriebenen Fehler

TAB_VIDEO:String   = 'Create TABLE VIDEODAT( ARBPLATZ INTEGER NOT NULL primary key,'+
               'STARTSID integer,'+
               'ERGSID  integer,'+
               'PRID    integer,'+
               'ART     CHAR,'+
               'IMAGE   blob sub_type 0 segment size 4096) ';
und gleicher Proceduraufruf gehen.
(Die als Beispiel gebrachte Anweisung mag einzeln funktionieren. Die Unit enthält allerding etwa 40 Tabellendeclarationen.)

Die 255 Zeichengrenze trift meines Wissens bisher nur für Resourcenstrings zu.

Gruß
Peter

Hawkeye219 8. Jan 2009 12:55

Re: Lokale Konstanten in D2009 begrenzt?
 
Hallo,

Zitat:

Zitat von fkerber
Ich glaube, kürzlich gelesen zu haben, dass die String-Konstanten nicht länger als 255 Zeichen sein dürfen.

ein Stringliteral darf nicht länger als 255 Zeichen sein. Stringkonstanten, die beispielsweise durch Verkettung von Stringliteralen entstehen, dürfen durchaus länger sein.

Es sieht so aus, als gäbe es eine Obergrenze für die Gesamtzahl/Gesamtgröße aller Literale. Ich habe so etwas bisher noch nicht beobachtet.

Gruß Hawkeye

hanspeter 8. Jan 2009 13:03

Re: Lokale Konstanten in D2009 begrenzt?
 
Das Projekt knirscht unter D2009 an allen Ecken und Enden.

Im Prinzip bin ich jetzt am überlegen, ob D2009 soviel Mehrwert bringt, das man den Umstellungsaufwand in Kauf nimmt,
oder ob es sinnvoller ist, bei D2007 zu bleiben und erst mal 1-2 Jahre abwarten, wie es mit Delphi (Stichwort neuer Compiler)
weiter geht.
Im Moment tendiere ich eher zu der 2. Variante.

Gruß
Peter

hanspeter 9. Jan 2009 07:55

Re: Lokale Konstanten in D2009 begrenzt?
 
So jetzt habe ich mir erst mal so geholfen, das ich das Erzeugen der Datenbank in eine Dll ausgelagert habe, welche ich mit D7 kompiliere.
Das funktioniert erst mal.
Es gibt ja noch mehr Varianten.
Datenbank aus externem SQL Script erzeugen.
Eine leere Musterdatenbank kopieren.

Welche Variante würdet ihr bevorzugen?

Mit Gruß
Peter

TBx 9. Jan 2009 08:04

Re: Lokale Konstanten in D2009 begrenzt?
 
Zitat:

Zitat von hanspeter
Datenbank aus externem SQL Script erzeugen.

Ich würde diese Variante bevorzugen, da somit sichergestellt ist, dass der Bytecode von Triggern und SPs auch wirklich zu der genutzen Firebirdversion paßt (wird dann ja schließlich erst generiert).

Gruß

Thomas

mschaefer 9. Jan 2009 08:05

Re: Lokale Konstanten in D2009 begrenzt?
 
Das mit der dll ist sicher nicht schlecht. Ich habe das mir mit einem externen Script gelöst, allerdings liegt das minimalverschlüsselt im Anwendungsverzeichnis, sodaß nicht jeder dran rumspielen kann.

Grüße // Martin

Nersgatt 9. Jan 2009 08:13

Re: Lokale Konstanten in D2009 begrenzt?
 
Bei uns wird beim ersten Start eine leere Datenbank kopiert (die auch schon einige fundamentale Stammdaten enthalten kann, z.B. Länder). Wenn die Datenbank angepasst werden muss, wird das über ein externes SQL-Script gemacht, das unterhalb des Programmpfades liegt.
Beim Start prüft das Programm, ob die DB auf dem aktuellen Stand ist, wenn nicht, werden die Scripte ausgeführt. Dabei führen wir in der Datenbank eine Datenbankversion und im Programm eine Konstante mit der geforderten Datenbankversion.

Gruß,
Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Seite 1 von 3  1 23      

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