<div dir="ltr"><div><div><div><div>Muchas gracias por la respuesta, yo me habia quedado con que eso no funcionaba.<br><br></div>Saludos,<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<br></div><div class="gmail_extra"><br><div class="gmail_quote">El 14 de agosto de 2015, 10:46, Maxi <span dir="ltr"><<a href="mailto:maximiliano.duarte@gmail.com" target="_blank">maximiliano.duarte@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">EL ADD te falló por las comillas<br>
<br>
const<br>
cte_consulta='select * from mi tabla where %s'<br>
<br>
en feneral yo uso<br>
<br>
sql.text:= format(cte_consulta,[parametros]);<br>
<br>
<br>
igualmente, esa informacion te la dan los objetos de la consulta.<br>
Y si usas las ZeosLib tienen un componente TSqlMetaData que te ofrece<br>
cualquier informacion sin importar el motor.<br>
<br>
<br>
<br>
El día 14 de agosto de 2015, 8:05, francisco prieto<br>
<<a href="mailto:fajprieto@gmail.com">fajprieto@gmail.com</a>> escribió:<br>
<div class="HOEnZb"><div class="h5">> José<br>
> Te respondo cada una.<br>
> 1) estoy generando una clase genérica, con la cual surgen distintas<br>
> combinaciones, algunas más lógicas que otras, pero todas válidas.<br>
> 2) Eso fue simplemente una prueba, pero de todos modos, a tiempo de<br>
> ejecución si dividido la sentencia en distintos add da error de prepare.<br>
> 3) La idea ahí era hacer una función, sin depender del motor. Se me ocurrió<br>
> probar en este caso, con una consulta medianamente compleja.<br>
><br>
> Muchas gracias igual por tus apreciaciones.<br>
><br>
> Saludos<br>
> Pancho<br>
> Córdoba<br>
> Argentina<br>
><br>
><br>
> El vie, 14 de agosto de 2015 03:43, Jose antonio Cuello Principal<br>
> <<a href="mailto:jcuello@artextrading.com">jcuello@artextrading.com</a>> escribió:<br>
>><br>
>> Hola, comentar alguna cosa que he visto.<br>
>><br>
>> 1) Si usas una variable string para montar la sentencia, ¿por qué usar<br>
>> parámetros? directamente suma los valores a la cadena. A menos que vayas a<br>
>> usar el sql en un bucle donde se ejecutará con distintos valores, pero en el<br>
>> ejemplo no indicabas esa condición.<br>
>><br>
>> 2) Si usas un TString, como la propiedad SQL del dataset, no necesitas<br>
>> insertar los espacios para separar las distintas partes de la sentencia. Ni<br>
>> al final de la linea anterior ni al comienzo de la nueva.<br>
>>         ejplo:    midataset.SQL.Add('SELECT *')<br>
>>                      midataset.SQL.Add('FROM mitabla');<br>
>><br>
>> 3) Dependiendo del motor de bases de datos, puedes crear una vista o una<br>
>> función que te realice la conversión del FIELD_TYPE quedando la sentencia<br>
>> más limpia y no teniendo que escribir el case en cada uso.<br>
>><br>
>> Espero pueda ser de ayuda. Un saludo<br>
>><br>
>> ________________________________<br>
>> De: "francisco prieto" <<a href="mailto:fajprieto@gmail.com">fajprieto@gmail.com</a>><br>
>> Para: "Spanish version of Lazarus List"<br>
>> <<a href="mailto:lazarus-es@lists.lazarus.freepascal.org">lazarus-es@lists.lazarus.freepascal.org</a>><br>
>> Enviados: Viernes, 14 de Agosto 2015 3:00:47<br>
>> Asunto: Re: [Lazarus-es] Sentencia larga Sql<br>
>><br>
>><br>
>><br>
>> El 13 de agosto de 2015, 13:34, Maxi <<a href="mailto:maximiliano.duarte@gmail.com">maximiliano.duarte@gmail.com</a>><br>
>> escribió:<br>
>>><br>
>>> quotedString()<br>
>><br>
>><br>
>><br>
>> Excelente lo suyo...<br>
>><br>
>> Quedo asi,<br>
>><br>
>>  lcSql:='SELECT RF.RDB$FIELD_NAME AS FIELD_NAME,CASE FL.RDB$FIELD_TYPE '+<br>
>>  ' WHEN   7 THEN '+QuotedStr('SMALLINT')+<br>
>>  ' WHEN   8 THEN '+QuotedStr('INTEGER')+<br>
>>  ' WHEN   9 THEN '+QuotedStr('QUAD')+<br>
>>  ' WHEN  10 THEN '+QuotedStr('FLOAT')+<br>
>>  ' WHEN  11 THEN '+QuotedStr('D_FLOAT')+<br>
>>  ' WHEN  12 THEN '+QuotedStr('DATE')+<br>
>>  ' WHEN  13 THEN '+QuotedStr('TIME')+<br>
>>  ' WHEN  14 THEN '+QuotedStr('CHAR')+<br>
>>  ' WHEN  16 THEN '+QuotedStr('INT64')+<br>
>>  ' WHEN  27 THEN '+QuotedStr('DOUBLE')+<br>
>>  ' WHEN  35 THEN '+QuotedStr('TIMESTAMP')+<br>
>>  ' WHEN  37 THEN '+QuotedStr('VARCHAR')+<br>
>>  ' WHEN  40 THEN '+QuotedStr('CSTRING')+<br>
>>  ' WHEN 261 THEN '+QuotedStr('CSTRING')+<br>
>>  ' ELSE '+QuotedStr('DESCONOCIDO')+<br>
>>  ' END AS FIELD_TYPE,'+<br>
>>  ' FL.RDB$FIELD_LENGTH AS FIELD_LENGTH,'+<br>
>>  ' COALESCE(CS.RDB$CHARACTER_SET_NAME,'''') AS FIELD_CHARSET'+<br>
>>  ' FROM RDB$RELATION_FIELDS RF '+<br>
>>  ' LEFT JOIN RDB$FIELDS FL ON RF.RDB$FIELD_SOURCE = FL.RDB$FIELD_NAME'+<br>
>>  ' LEFT JOIN RDB$CHARACTER_SETS CS ON FL.RDB$CHARACTER_SET_ID =<br>
>> CS.RDB$CHARACTER_SET_ID'+<br>
>>  ' WHERE RF.RDB$RELATION_NAME=:nomTabla AND RF.RDB$FIELD_NAME=:nomCampo'+<br>
>>  ' ORDER BY RF.RDB$FIELD_POSITION';<br>
>>  ModuloDatos.qAccionSql.SQL.Text:=lcSql;<br>
>>  ModuloDatos.qAccionSql.Params.ParamByName('nomTabla').AsString:=lcTabla;<br>
>>  ModuloDatos.qAccionSql.Params.ParamByName('nomCampo').AsString:=lcCampo;<br>
>><br>
>> Saludos y Gracias,<br>
>><br>
>> Pancho<br>
>> Córdoba<br>
>> Argentina<br>
>><br>
>> _______________________________________________<br>
>> Lazarus-es mailing list<br>
>> <a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
>> <a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
>><br>
>><br>
>><br>
>> --<br>
>> José Antonio Cuello<br>
>> Artex Trading sa<br>
>> Gold Football sl<br>
>> _______________________________________________<br>
>> Lazarus-es mailing list<br>
>> <a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
>> <a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
><br>
><br>
> _______________________________________________<br>
> Lazarus-es mailing list<br>
> <a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
> <a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
><br>
<br>
<br>
<br>
--<br>
</div></div><span class="im HOEnZb">El que pregunta aprende, y el que contesta aprende a responder.<br>
<br>
No a la obsolecencia programada:<br>
<a href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml" rel="noreferrer" target="_blank">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a><br>
<br>
Linux User #495070<br>
<a href="http://domonetic.com/blog" rel="noreferrer" target="_blank">http://domonetic.com/blog</a><br>
<br>
</span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
</div></div></blockquote></div><br></div>