[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