[Lazarus-es] Firebird zeos INSERT INTO no funciona

Jose Antonio. Cuello Principal jcuello en artextrading.com
Mar Oct 9 14:09:16 CEST 2012


ok, gracias. Ahora me queda más claro. 
Un saludo 

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

De: "José Mejuto" <joshyfun en gmail.com> 
Para: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> 
Enviados: Martes, 9 de Octubre 2012 10:24:39 
Asunto: Re: [Lazarus-es] Firebird zeos INSERT INTO no funciona 

El 09/10/2012 8:12, Jose Antonio. Cuello Principal escribió: 
> ¿Dónde pone que sea más correcto o más adecuado? ... Lo que se ejecuta 
> al final es el contenido de SQL.TEXT por lo que si ya se lo das que 
> problema hay. 

Hola, 

Hmmm, no, lo que se ejecuta es TEXT si, pero de modo diferente. 
Básicamente lo que sucede en el motor de base de datos (si los 
componentes funcionan bien claro) es algo como esto cuando insertamos 
tres registros: 

Sin parámetros: 

1.Creamos SQL 
1.Preparamos SQL (BD) 
1.Ejecutamos SQL (BD) 
1."UnPrepare" SQL (BD) 
2.Creamos SQL 
2.Preparamos SQL (BD) 
2.Ejecutamos SQL (BD) 
2."UnPrepare" SQL (BD) 
3.Creamos SQL 
3.Preparamos SQL (BD) 
3.Ejecutamos SQL (BD) 
3."UnPrepare" SQL (BD) 

Con parámetros: 

1.Creamos SQL 
1.Pasamos parámetros 
1.Preparamos SQL (BD) 
1.Ejecutamos SQL (DB) 
2.Pasamos parámetros 
2.Ejecutamos SQL (DB) 
3.Pasamos parámetros 
3.Ejecutamos SQL (DB) 
3."UnPrepare" SQL (BD) 

Contando que lo que más consume en la BD es el "Preparamos SQL" la 
diferencia de hacerlo con parámetros debería ser positiva (sobre el 
papel) especialmente cuanto más compleja sea la sentencia SQL. 

> Creo que si uno tiene clara la sentencia y esta no es complicada no creo 
> que sea peor indicarla directamente. 

Peor no, en teoría más lenta si, en teoría ya que tus resultados 
empíricos parecen demostrar lo contrario. 

> Además en otros lenguajes en los que no existen los parámetros, por lo 
> que se tiene que hacer mediante cadena. Realmente sigo sin ver por qué 
> es más correcto o más adecuado. 

Uno y muy importante es la seguridad, imagina un programa que pide un 
nombre de usuario y hace un select con él: 

var 
UserName: string; 
begin 
SQL.Text='Select * from TTabla where Nombre='''+UserName+'''; 
SQL.Open; 
end; 

Si ejecutas eso con UserName='Jose' todo va bien... pero si lo ejecutas con: 

UserName:='''; DELETE * from TTabla; Select * from TTable where Nombre='''; 

La cosa no será muy recomendable de ejecutar ;) 

Con parámetros no se te da esa situación ya que la sintaxis la mantiene 
en order el sistema de parámetros. 

Otra ventaja está en los campos de fecha ya que el sistema de parámetros 
se encarga de dar la fecha en el sistema que espera la base de datos que 
no tiene que ser igual a nuestro "Locale". 

Otra más es que por ejemplo entre distintas bases de datos las comillas 
simples y dobles pueden ser necesarias una para cada cosa, 
intercambiables, o con significados diferentes. Este problema lo evita 
el sistema de parámetros. 

Espero haberme explicado bien. 

_______________________________________________ 
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/20121009/845a00ee/attachment-0002.html>


More information about the Lazarus-es mailing list