[Lazarus-es] Sentencia larga Sql

francisco prieto fajprieto en gmail.com
Vie Ago 14 20:06:57 CEST 2015


Muchas gracias por la respuesta, yo me habia quedado con que eso no
funcionaba.

Saludos,

Pancho
Córdoba
Argentina

El 14 de agosto de 2015, 10:46, Maxi <maximiliano.duarte en gmail.com>
escribió:

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


More information about the Lazarus-es mailing list