[Lazarus-es] Sentencia larga Sql

francisco prieto fajprieto en gmail.com
Jue Ago 13 16:08:13 CEST 2015


Me contesto solito...

Se corrige asi...

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

Saludos y gracias,

Pancho
Córdoba
Argentina

El 13 de agosto de 2015, 10:55, francisco prieto <fajprieto en gmail.com>
escribió:

> 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/ad5c470d/attachment-0002.html>


More information about the Lazarus-es mailing list