[Lazarus-es] Sentencia larga Sql

Maxi maximiliano.duarte en gmail.com
Jue Ago 13 18:34:43 CEST 2015


Nunca me pasó salvo en delphi como constantes.

Son las comillas. usa comillas simples o quotedString();
Y comenta como fue con el puerto Serial

El día 13 de agosto de 2015, 12:14, francisco prieto
<fajprieto en gmail.com> escribió:
> Falsa alarma...
>
> El select y los parametros los toma, pero cuando lo ejecuta da el siguiente
> error
>
> El proyecto Bal9900 ha lanzado una excepcion 'EIBDatabaseError' con el
> mensaje:
> :PrepareStatement:
> -Dynamic SQL Error
> -SQL error code=-104
> -Token unknown - line 2, column 1
> -Select
>
> Con esto pienso que cada Add que se hace debe ser una sentencia completa...
>
> Los mantengo al tanto.
>
> Saludos,
>
> Pancho
> Córdoba
> Argentina
>
>
> El 13 de agosto de 2015, 11:08, francisco prieto <fajprieto en gmail.com>
> escribió:
>>
>> 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
>>
>>
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>



-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog




More information about the Lazarus-es mailing list