Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error Too Many Local Constants (https://www.clubdelphi.com/foros/showthread.php?t=75506)

Coichi Kake 29-08-2011 18:48:34

Error Too Many Local Constants
 
Buenas,

Quisiera que favor alguien pudiera decirme el porque de el error
"Too Many Local Constant"
ya me ha ocurrido varias veces y me gustaria saber como hacer para
resolverlo.

Gracias de Antemano

A por cierto uso delphi 6.

roman 29-08-2011 18:55:09

Quizá esto te sirva:

http://docs.embarcadero.com/products...onsts_xml.html

// Saludos

Coichi Kake 29-08-2011 19:04:03

Gracias por tu respuesta roman, pero ahora me surgue otra pregunta

hay alguna manera de aumentar el limite del compiler internal storage?

defcon1_es 31-08-2011 09:55:04

Pues creo que no se puede aumentar, pero lo puedes solucionar de otra forma; supongo que tienes código similar a este:
Código Delphi [-]
const
  constante_1 = 'aaaaaaa';
  constante_2 = 'bbbbbbb';
  ....
  constante_N = 'NNNNNN';
y es en alguna de estas líneas donde marca el error al compilar.
En vez de declarar tantas constantes, o constantes con cadenas de texto largas, prueba a declararlas como variables (si no todas, algunas):
Código Delphi [-]
var 
  ex_constante_1 :String = 'aaaaaaa';
  ex_constante_2 :String = 'bbbbbbb';
  ....
  ex_constante_N :String = 'NNNNNN';

Chris 01-09-2011 00:19:03

Estimado defcon, siento discrepar contigo. Pero creo que más bien el problema se soluciona -en primera instancia- utilizando constante. En segunda instancia (que es lo mejor), sería reestructurar el código. Si este error te está apareciendo es porque estás aplicando malas técnicas de programación. Estás escribiendo procedimientos extremadamente largos y utilizando en ellos constantes líneales (o en línea). Por ejemplo:

Código Delphi [-]
procedure un_procedimiento_muy_largo;
begin
    if (VariableX = 'CONTABILIDAD') then
        ShowMessage('Hola contador!') // estás son constantes líneales (están combinadas con el código)

    { siguen decenas de líneas de código que siguen utilizando constantes lineales }

Como primera instancia, para solventar el problema, hay que apartar esas constantes del código de lógica. Por ejemplo:
Código Delphi [-]
procedure un_procedimiento_muy_largo;
const  // o mejor aún "resourcestring"
    CONTABILIDAD = 'CONTABILIDAD';
    HOLA_CONTADOR = 'Hola contador!';
begin
    if (VariableX = CONTABILIDAD) then
        ShowMessage(HOLA_CONTADOR ) // estás son constantes pre declaradas

    { siguen decenas de líneas de código que siguen constantes pre declaradas }

A cómo dije eso sería en primera instancia. Luego, habrá que refactorizar el código y dividir ese procedimiento en varios.

Saludos,
Chris

defcon1_es 02-09-2011 11:44:20

Puede ser lo que dices, Chris, pero casualmente el mes pasado le pasaba lo que comento a un compañero en un proyecto que lleva él sólo, te resumo:

Un ejecutable que se conecta a una base de datos Firebird.
El ejecutable actualiza la estructura de la base de datos a la que se conecta, y se le ocurrió poner todo el código sql como constantes de esta forma
Código Delphi [-]
const   
  prActualizarapuntes = 'CREATE OR ALTER PROCEDURE ....';   
  prActualizarlibro1 = 'CREATE OR ALTER PROCEDURE ....';   
  prActualizarpredefinidos = 'CREATE OR ALTER PROCEDURE ....';

y los procedimientos almacenados tienen (algunos) más de 600 líneas de código, y al compilar el proyecto, le daba el mismo error.

Le dí 3 opciones para solucionarlo:
1) añadir al proyecto como recurso un fichero de texto con todo el codigo sql
2) usar el componente JvDataEmbedded (creo recordar)
3) Cambiar algunas de esas constantes por variables


La franja horaria es GMT +2. Ahora son las 07:24:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi