[Lazarus-es] Sentencia larga Sql

Jose antonio Cuello Principal jcuello en artextrading.com
Vie Ago 14 08:36:57 CEST 2015


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 

----- Mensaje original -----

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


More information about the Lazarus-es mailing list