PDA

Ver la Versión Completa : Error Too Many Local Constants


Coichi Kake
29-08-2011, 18:48:34
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/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/cm_too_many_consts_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:

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):

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:

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:
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

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