<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: times new roman,new york,times,serif; font-size: 12pt; color: #000000'>ok, gracias. Ahora me queda más claro.<div>Un saludo<br><br><hr id="zwchr"><div style="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"José Mejuto" <joshyfun@gmail.com><br><b>Para: </b>"Spanish version of Lazarus List" <lazarus-es@lists.lazarus.freepascal.org><br><b>Enviados: </b>Martes, 9 de Octubre 2012 10:24:39<br><b>Asunto: </b>Re: [Lazarus-es] Firebird zeos INSERT INTO no funciona<br><br>El 09/10/2012 8:12, Jose Antonio. Cuello Principal escribió:<br>> ¿Dónde pone que sea más correcto o más adecuado? ... Lo que se ejecuta<br>> al final es el contenido de SQL.TEXT por lo que si ya se lo das que<br>> problema hay.<br><br>Hola,<br><br>Hmmm, no, lo que se ejecuta es TEXT si, pero de modo diferente. <br>Básicamente lo que sucede en el motor de base de datos (si los <br>componentes funcionan bien claro) es algo como esto cuando insertamos <br>tres registros:<br><br>Sin parámetros:<br><br>1.Creamos SQL<br>1.Preparamos SQL (BD)<br>1.Ejecutamos SQL (BD)<br>1."UnPrepare" SQL (BD)<br>2.Creamos SQL<br>2.Preparamos SQL (BD)<br>2.Ejecutamos SQL (BD)<br>2."UnPrepare" SQL (BD)<br>3.Creamos SQL<br>3.Preparamos SQL (BD)<br>3.Ejecutamos SQL (BD)<br>3."UnPrepare" SQL (BD)<br><br>Con parámetros:<br><br>1.Creamos SQL<br>1.Pasamos parámetros<br>1.Preparamos SQL (BD)<br>1.Ejecutamos SQL (DB)<br>2.Pasamos parámetros<br>2.Ejecutamos SQL (DB)<br>3.Pasamos parámetros<br>3.Ejecutamos SQL (DB)<br>3."UnPrepare" SQL (BD)<br><br>Contando que lo que más consume en la BD es el "Preparamos SQL" la <br>diferencia de hacerlo con parámetros debería ser positiva (sobre el <br>papel) especialmente cuanto más compleja sea la sentencia SQL.<br><br>> Creo que si uno tiene clara la sentencia y esta no es complicada no creo<br>> que sea peor indicarla directamente.<br><br>Peor no, en teoría más lenta si, en teoría ya que tus resultados <br>empíricos parecen demostrar lo contrario.<br><br>> Además en otros lenguajes en los que no existen los parámetros, por lo<br>> que se tiene que hacer mediante cadena. Realmente sigo sin ver por qué<br>> es más correcto o más adecuado.<br><br>Uno y muy importante es la seguridad, imagina un programa que pide un <br>nombre de usuario y hace un select con él:<br><br>var<br>   UserName: string;<br>begin<br>   SQL.Text='Select * from TTabla where Nombre='''+UserName+''';<br>   SQL.Open;<br>end;<br><br>Si ejecutas eso con UserName='Jose' todo va bien... pero si lo ejecutas con:<br><br>UserName:='''; DELETE * from TTabla; Select * from TTable where Nombre=''';<br><br>La cosa no será muy recomendable de ejecutar ;)<br><br>Con parámetros no se te da esa situación ya que la sintaxis la mantiene <br>en order el sistema de parámetros.<br><br>Otra ventaja está en los campos de fecha ya que el sistema de parámetros <br>se encarga de dar la fecha en el sistema que espera la base de datos que <br>no tiene que ser igual a nuestro "Locale".<br><br>Otra más es que por ejemplo entre distintas bases de datos las comillas <br>simples y dobles pueden ser necesarias una para cada cosa, <br>intercambiables, o con significados diferentes. Este problema lo evita <br>el sistema de parámetros.<br><br>Espero haberme explicado bien.<br><br>_______________________________________________<br>Lazarus-es mailing list<br>Lazarus-es@lists.lazarus.freepascal.org<br>http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es<br></div><br></div></div></body></html>