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.