[Lazarus-es] Sentencia larga Sql

francisco prieto fajprieto en gmail.com
Vie Ago 14 13:05:19 CEST 2015


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150814/5d305da2/attachment-0002.html>


More information about the Lazarus-es mailing list