Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-05-2005
pablo pablo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Argentina . Junin
Posts: 78
Poder: 21
pablo Va por buen camino
prepare

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

gracias
__________________
Pablo Tello
Responder Con Cita
  #2  
Antiguo 08-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 08-05-2005 a las 10:48:35.
Responder Con Cita
  #3  
Antiguo 10-05-2005
pablo pablo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Argentina . Junin
Posts: 78
Poder: 21
pablo Va por buen camino
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 Tello
Responder Con Cita
  #4  
Antiguo 10-05-2005
pablo pablo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Argentina . Junin
Posts: 78
Poder: 21
pablo Va por buen camino
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
__________________
Pablo Tello
Responder Con Cita
  #5  
Antiguo 10-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
la ayuda de delphi es incluso más clara que mi explicación
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


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


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
Copyright 1996-2007 Club Delphi