Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   prepare (https://www.clubdelphi.com/foros/showthread.php?t=21142)

pablo 08-05-2005 05:39:10

prepare
 
hola!
queria saber para que de usa el TQuery.prepare y cuando conviene usarlo

gracias

Lepe 08-05-2005 10:46:31

Si tienes un Tquery con parámetros, el prepare hace que el motor de bases de datos deje la consulta "preparada", mejor dicho, compilada en el servidor, de esta forma la próxima consulta que se realice, solo tiene que cambiar los parámetros y buscar los datos, como ves la consulta se acelera.

Si haces consultas del tipo:

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.sql.Clear;
consulta.sql.add ('select nombre from tabla where nombre = +edit1.text);
consulta.prepare;
consulta.open;

En este caso el prepare no sirve de mucho, ya que estas eliminando el sql, sería conveniente usar parámetros, y no modificar el sql

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.close;
consulta.paramsbyname('nombre').AsString := edit1.text;
if not consulta.prepared then 
  consulta.prepare;
consulta.open;
Y ahora si, la consulta se agiliza (siempre y cuando el motor de BBDD lo permita).

Un saludo

pablo 10-05-2005 15:08:27

unprepare
 
Cita:

Empezado por Lepe
Si tienes un Tquery con parámetros, el prepare hace que el motor de bases de datos deje la consulta "preparada", mejor dicho, compilada en el servidor, de esta forma la próxima consulta que se realice, solo tiene que cambiar los parámetros y buscar los datos, como ves la consulta se acelera.

Si haces consultas del tipo:

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.sql.Clear;
consulta.sql.add ('select nombre from tabla where nombre = +edit1.text);
consulta.prepare;
consulta.open;

En este caso el prepare no sirve de mucho, ya que estas eliminando el sql, sería conveniente usar parámetros, y no modificar el sql

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.close;
consulta.paramsbyname('nombre').AsString := edit1.text;
if not consulta.prepared then 
  consulta.prepare;
consulta.open;
Y ahora si, la consulta se agiliza (siempre y cuando el motor de BBDD lo permita).

Un saludo



Perfecto, entendi...
1)ahora, antes de hacer el close definitivo, convendria hacer unprepare, o delphi lo hace con el close?

2) En el caso de una consulta

pablo 10-05-2005 15:09:52

unprepare
 
Cita:

Empezado por Lepe
Si tienes un Tquery con parámetros, el prepare hace que el motor de bases de datos deje la consulta "preparada", mejor dicho, compilada en el servidor, de esta forma la próxima consulta que se realice, solo tiene que cambiar los parámetros y buscar los datos, como ves la consulta se acelera.

Si haces consultas del tipo:

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.sql.Clear;
consulta.sql.add ('select nombre from tabla where nombre = +edit1.text);
consulta.prepare;
consulta.open;

En este caso el prepare no sirve de mucho, ya que estas eliminando el sql, sería conveniente usar parámetros, y no modificar el sql

Código Delphi [-]
procedure boton1Click(...)
begin
consulta.close;
consulta.paramsbyname('nombre').AsString := edit1.text;
if not consulta.prepared then 
  consulta.prepare;
consulta.open;
Y ahora si, la consulta se agiliza (siempre y cuando el motor de BBDD lo permita).

Un saludo



Perfecto, entendi...
1)ahora, antes de hacer el close definitivo, convendria hacer unprepare, o delphi lo hace con el close?

2) En el caso de una consulta
close
params[0].....
prepare
open
lineas de codigo que usan la consulta
close

aqui entonces mucho sentido el prepare no tiene no?

un abrazo
pablo

Lepe 10-05-2005 16:22:01

la ayuda de delphi es incluso más clara que mi explicación :D
Cita:

Delphi automatically prepares a query if it is executed without first being prepared. After execution, Delphi unprepares the query. When a query will be executed a number of times, an application should always explicitly prepare the query to avoid multiple and unnecessary prepares and unprepares.

Preparing a query consumes some database resources, so it is good practice for an application to unprepare a query once it is done using it. The UnPrepare method unprepares a query.

Note: When you change the text of a query at runtime, the query is automatically closed and unprepared.
After execution, Delphi unprepares the query En la ayuda y en el código fuente NO veo claro cuando termina la ejecución de una query. En el OnClose del query no hace un Unprepare.

1) Yo solo lo he mirado para el caso del TQuery del BDE, y para este caso, delphi no hace el Unprepare, solo la cierra.

2) Pues como tu dices, no tiene sentido hacer el prepare


La franja horaria es GMT +2. Ahora son las 16:45:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi