Ver Mensaje Individual
  #3  
Antiguo 31-01-2016
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
La idea del "prepare", es que se cree el SQL con parámetros (como ya lo haces), y se compila una sola vez la instrucción (prepare), se da valor a los parámetros y se ejecuta/abre.

Tiene sentido cuando un mismo SQL se va a ejecutar varias veces en la misma tabla con los mismos campos, por ejemplo inserciones masivas, actualizaciones, selecciones, etc...

Código SQL [-]
select * from tabla where fecha between :fecha_inicial and :fecha_final

Muy típico en listados por fechas, creas la ventana de listados donde asignas el SQL, lo preparas y cuando el usuario cambia las fechas en la interfaz, solo asignas el valor de los parámetros.

En teoría es lo más eficiente, ya que evitas:
- averiguar los campos que se seleccionan (solo se hace una vez en la vida del Form, donde se crean los campos del TQuery, rellenando el FieldsDef, etc).
- compilar el SQL para obtener el plan de ejecución (qué índices se usarán según los join que hagas, los campos del order by, etc)

Es cierto que no es necesario llamar a "prepare" porque lo hace internamente, pero es buena práctica; solo con ver un "if not query.prepared", sabes que el SQL no se modifica. Obviamente no tiene sentido hacerlo en un FormCreate, porque si se acaba de crear el Form y el TQuery, aún no está preparado.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita