<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div>Grupo esta es una de las tantas sentencias Sql que tiene mi sistema... Aclaro que trabajo con Lazarus y no con Delphi....<br><br>lcSql:='SELECT RF.RDB$FIELD_NAME AS FIELD_NAME,CASE FL.RDB$FIELD_TYPE ';<br> lcSql:=lcSql+' WHEN   7 THEN ''SMALLINT''';<br> lcSql:=lcSql+' WHEN   8 THEN ''INTEGER''';<br> lcSql:=lcSql+' WHEN   9 THEN ''QUAD''';<br> lcSql:=lcSql+' WHEN  10 THEN ''FLOAT''';<br> lcSql:=lcSql+' WHEN  11 THEN ''D_FLOAT''';<br> lcSql:=lcSql+' WHEN  12 THEN ''DATE''';<br> lcSql:=lcSql+' WHEN  13 THEN ''TIME''';<br> lcSql:=lcSql+' WHEN  14 THEN ''CHAR''';<br> lcSql:=lcSql+' WHEN  16 THEN ''INT64''';<br> lcSql:=lcSql+' WHEN  27 THEN ''DOUBLE''';<br> lcSql:=lcSql+' WHEN  35 THEN ''TIMESTAMP''';<br> lcSql:=lcSql+' WHEN  37 THEN ''VARCHAR''';<br> lcSql:=lcSql+' WHEN  40 THEN ''CSTRING''';<br> lcSql:=lcSql+' WHEN 261 THEN ''BLOB''';<br> lcSql:=lcSql+' ELSE ''DESCONOCIDO''';<br> lcSql:=lcSql+' END AS FIELD_TYPE,';<br> lcSql:=lcSql+' FL.RDB$FIELD_LENGTH AS FIELD_LENGTH,';<br> lcSql:=lcSql+' COALESCE(CS.RDB$CHARACTER_SET_NAME,'''') AS FIELD_CHARSET';<br> lcSql:=lcSql+' FROM RDB$RELATION_FIELDS RF ';<br> lcSql:=lcSql+' LEFT JOIN RDB$FIELDS FL ON RF.RDB$FIELD_SOURCE = FL.RDB$FIELD_NAME';<br> lcSql:=lcSql+' LEFT JOIN RDB$CHARACTER_SETS CS ON FL.RDB$CHARACTER_SET_ID = CS.RDB$CHARACTER_SET_ID';<br> lcSql:=lcSql+' WHERE RF.RDB$RELATION_NAME=:nomTabla AND RF.RDB$FIELD_NAME=:nomCampo';<br> lcSql:=lcSql+' ORDER BY RF.RDB$FIELD_POSITION';<br><br></div>La cargue asi y tambien la cargue directamente en un variable.<br><br></div>Pero en tiempo de ejecucion solo se cargan las primeras 255 posiciones, es decir...<br><br>'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 ''...<br><br></div>Y obviamente no funciona.<br><br></div>La variable lcSql la defini tanto como String como AnsiString, que según dice en este link es ilimitado...<br><br><a href="http://www.freepascal.org/docs-html/ref/refsu12.html">http://www.freepascal.org/docs-html/ref/refsu12.html</a><br><br></div>Pero de todos modos solo toma los primeros 255 caracteres.<br><br></div>Estoy trabajando con el objeto TSQLQuery<br><br></div>Si pruebo mi sentencia directamente en FlameRobin funciona con lo cual debo pensar que todo el problema recae en TSqlQuery.<br><br></div><br></div><div>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.<br></div><div><br></div>Se les ocurre alguna otra solución?<br><br>Saludos,<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<br></div>