[Lazarus-es] Sentencia larga Sql

francisco prieto fajprieto en gmail.com
Jue Ago 13 15:55:09 CEST 2015


Grupo esta es una de las tantas sentencias Sql que tiene mi sistema...
Aclaro que trabajo con Lazarus y no con Delphi....

lcSql:='SELECT RF.RDB$FIELD_NAME AS FIELD_NAME,CASE FL.RDB$FIELD_TYPE ';
 lcSql:=lcSql+' WHEN   7 THEN ''SMALLINT''';
 lcSql:=lcSql+' WHEN   8 THEN ''INTEGER''';
 lcSql:=lcSql+' WHEN   9 THEN ''QUAD''';
 lcSql:=lcSql+' WHEN  10 THEN ''FLOAT''';
 lcSql:=lcSql+' WHEN  11 THEN ''D_FLOAT''';
 lcSql:=lcSql+' WHEN  12 THEN ''DATE''';
 lcSql:=lcSql+' WHEN  13 THEN ''TIME''';
 lcSql:=lcSql+' WHEN  14 THEN ''CHAR''';
 lcSql:=lcSql+' WHEN  16 THEN ''INT64''';
 lcSql:=lcSql+' WHEN  27 THEN ''DOUBLE''';
 lcSql:=lcSql+' WHEN  35 THEN ''TIMESTAMP''';
 lcSql:=lcSql+' WHEN  37 THEN ''VARCHAR''';
 lcSql:=lcSql+' WHEN  40 THEN ''CSTRING''';
 lcSql:=lcSql+' WHEN 261 THEN ''BLOB''';
 lcSql:=lcSql+' ELSE ''DESCONOCIDO''';
 lcSql:=lcSql+' END AS FIELD_TYPE,';
 lcSql:=lcSql+' FL.RDB$FIELD_LENGTH AS FIELD_LENGTH,';
 lcSql:=lcSql+' COALESCE(CS.RDB$CHARACTER_SET_NAME,'''') AS FIELD_CHARSET';
 lcSql:=lcSql+' FROM RDB$RELATION_FIELDS RF ';
 lcSql:=lcSql+' LEFT JOIN RDB$FIELDS FL ON RF.RDB$FIELD_SOURCE =
FL.RDB$FIELD_NAME';
 lcSql:=lcSql+' LEFT JOIN RDB$CHARACTER_SETS CS ON FL.RDB$CHARACTER_SET_ID
= CS.RDB$CHARACTER_SET_ID';
 lcSql:=lcSql+' WHERE RF.RDB$RELATION_NAME=:nomTabla AND
RF.RDB$FIELD_NAME=:nomCampo';
 lcSql:=lcSql+' ORDER BY RF.RDB$FIELD_POSITION';

La cargue asi y tambien la cargue directamente en un variable.

Pero en tiempo de ejecucion solo se cargan las primeras 255 posiciones, es
decir...

'SELECT RF.RDB$FIELD_NAME AS FIELD_NAME,CASE FL.RDB$FIELD_TYPE  WHEN   7
THEN ''SMALLINT'' WHEN   8 THEN ''INTEGER'' WHEN   9 THEN ''QUAD'' WHEN  10
THEN ''FLOAT'' WHEN  11 THEN ''D_FLOAT'' WHEN  12 THEN ''DATE'' WHEN  13
THEN ''TIME'' WHEN  14 THEN ''...

Y obviamente no funciona.

La variable lcSql la defini tanto como String como AnsiString, que según
dice en este link es ilimitado...

http://www.freepascal.org/docs-html/ref/refsu12.html

Pero de todos modos solo toma los primeros 255 caracteres.

Estoy trabajando con el objeto TSQLQuery

Si pruebo mi sentencia directamente en FlameRobin funciona con lo cual debo
pensar que todo el problema recae en TSqlQuery.


En este caso todos los when los puedo hacer del lado de Lazarus para
acortar la sentencia, pero en muchos caso no voy a poder hacer eso, con lo
cual esta es una solución para salir del paso pero no una solución real.

Se les ocurre alguna otra solución?

Saludos,

Pancho
Córdoba
Argentina
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150813/6f739775/attachment-0002.html>


More information about the Lazarus-es mailing list