<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div>Falsa alarma...<br><br></div>El select y los parametros los toma, pero cuando lo ejecuta da el siguiente error<br><br></div>El proyecto Bal9900 ha lanzado una excepcion 'EIBDatabaseError' con el mensaje:<br></div>:PrepareStatement:<br></div>-Dynamic SQL Error<br></div>-SQL error code=-104<br></div>-Token unknown - line 2, column 1<br></div>-Select<br><br></div>Con esto pienso que cada Add que se hace debe ser una sentencia completa...<br><br></div>Los mantengo al tanto.<br><br></div>Saludos,<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<br><div><div><div><div><div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 13 de agosto de 2015, 11:08, francisco prieto <span dir="ltr"><<a href="mailto:fajprieto@gmail.com" target="_blank">fajprieto@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Me contesto solito...<br><br></div>Se corrige asi...<br><br>ModuloDatos.qAccionSql.SQL.Add('SELECT RF.RDB$FIELD_NAME AS FIELD_NAME,CASE FL.RDB$FIELD_TYPE ');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN   7 THEN ''SMALLINT''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN   8 THEN ''INTEGER''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN   9 THEN ''QUAD''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  10 THEN ''FLOAT''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  11 THEN ''D_FLOAT''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  12 THEN ''DATE''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  13 THEN ''TIME''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  14 THEN ''CHAR''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  16 THEN ''INT64''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  27 THEN ''DOUBLE''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  35 THEN ''TIMESTAMP''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  37 THEN ''VARCHAR''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN  40 THEN ''CSTRING''');<br> ModuloDatos.qAccionSql.SQL.Add(' WHEN 261 THEN ''BLOB''');<br> ModuloDatos.qAccionSql.SQL.Add(' ELSE ''DESCONOCIDO''');<br> ModuloDatos.qAccionSql.SQL.Add(' END AS FIELD_TYPE,');<br> ModuloDatos.qAccionSql.SQL.Add(' FL.RDB$FIELD_LENGTH AS FIELD_LENGTH,');<br> ModuloDatos.qAccionSql.SQL.Add(' COALESCE(CS.RDB$CHARACTER_SET_NAME,'''') AS FIELD_CHARSET');<br> ModuloDatos.qAccionSql.SQL.Add(' FROM RDB$RELATION_FIELDS RF ');<br> ModuloDatos.qAccionSql.SQL.Add(' LEFT JOIN RDB$FIELDS FL ON RF.RDB$FIELD_SOURCE = FL.RDB$FIELD_NAME');<br> ModuloDatos.qAccionSql.SQL.Add(' LEFT JOIN RDB$CHARACTER_SETS CS ON FL.RDB$CHARACTER_SET_ID = CS.RDB$CHARACTER_SET_ID');<br> ModuloDatos.qAccionSql.SQL.Add(' WHERE RF.RDB$RELATION_NAME=:nomTabla AND RF.RDB$FIELD_NAME=:nomCampo');<br> ModuloDatos.qAccionSql.SQL.Add(' ORDER BY RF.RDB$FIELD_POSITION');<br><br></div>Saludos y gracias,<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">El 13 de agosto de 2015, 10:55, francisco prieto <span dir="ltr"><<a href="mailto:fajprieto@gmail.com" target="_blank">fajprieto@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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" target="_blank">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>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>