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 10-11-2006
fausto fausto is offline
Registrado
 
Registrado: feb 2006
Posts: 7
Poder: 0
fausto Va por buen camino
Poner TADOQuery a null

Hola a todos.

Os explico mi problema:

Tengo un objeto TADOQuery el cual abro y utilizo.
Lo último que hago con él es cerralo (con "Close").
(La BBDD a la que accede es SQL Server)

Pero me he dado cuenta de que el método "Close" no elimina la conexión de la BBDD. Se queda en estado "Awaiting command".
He probado con "Destroy", pero tampoco...

He oído que la forma de hacerlo es poner el objeto a null.

No sé si esa el la forma correcta de hacerlo o no.
¿Podríais ayudarme?

Que conste que llevo muuuy poco tiempo en esto de Delphi...

Saludos y gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 10-11-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Intentar cerrar/liberar la conexión asociada a ese ADOQuery si es que no la utilizas en otro sitio.

Código Delphi [-]
  ADOQ.Connection.Close;  (Connected := False
  ADOQ.Connection.Close;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 13-11-2006
fausto fausto is offline
Registrado
 
Registrado: feb 2006
Posts: 7
Poder: 0
fausto Va por buen camino
Poner TADOQuery a null

Gracias por la solución, pero tp me vale.

Explico con más detalle la situación:

Tengo un objeto TADOQuery que pertenece a un Form y que utilizo más de una vez.
He conseguido eliminar la conexión a la BBDD liberando el objeto:

miTADOQuery.Free:

El problema es que, cuando lo utilizo la segunda vez, por supuesto no me deja.

Al liberar el objeto tendría (creo) que volver a darle todos los valores que le dí al crear el objeto de forma visual (arrastrándolo, etc...) y es un coñazo.

No me deja cerrar (con "Close") la conexión pq en todo momento me dice que es nil. (Los datos de la conexión los sabe a través de la propiedad ConnectionString).

Los demás objetos que tenía en la misma situación no me han dado problemas pq se crean en el mismo método en que los utilizo. Los libero con "Free" y se vuelven a crear de cero cuandio llamo al método.

Supongo que me he explicado fatal... pero, aún así:
¿Alguna idea?
Responder Con Cita
  #4  
Antiguo 13-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola fausto
Creo que Neftali te esta dando la solucion.
Cuando se activa, ose necesitas la informacion del query:
Código Delphi [-]
ADOQuery1.Active:= True;
Cuando ya no necesitas que este conectado:
Código Delphi [-]
ADOQuery1.Active:= False;
Esto conecta y desconecta el query.
Ahora no se porque desconectarlo del connectionString, Para Que
Si dices que lo utilizas denuevo varias veces., No lo entiendo.
Saludos
Responder Con Cita
  #5  
Antiguo 13-11-2006
fausto fausto is offline
Registrado
 
Registrado: feb 2006
Posts: 7
Poder: 0
fausto Va por buen camino
Poniendo "Active" a False, la connexión se sigue quedando (aunque "sleeping") en la BBDD.
Ejecuto el procedimiento sp_who de SQL Server que me da las conexiones que tiene en el momento, y sigue esándo. Sólamente desaparece cuando libero el objeto TADOQuery.
Tanto con "close" como poniendo "Active" a false, deja la conexxion "sleeping", pero no la libera realmente.
Respecto a la desconectarlo del ConnectionString... no me explicado bien. Ni caso.
Responder Con Cita
  #6  
Antiguo 13-11-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Efectivamente mi amigo, a pesar de lo que dicen los dos amigos foristas anteriores, no basta con cerrar la consulta o desactivarla para liberar la conexión en SqlServer.

Esto deberás hacerlo directamente sobre tu objeto AdoConnection.

Deberas hacer lo siguiente amigo mio.

AdoConnection.Close;
AdoConnection.Free;
AdoConnection := Nil;

Si tienes los componentes en un Datamodule es más sencillo

Datamodule.AdoConnection.Close;
DataModule.Free;
DataModule := Nil;


Suerte amigo.
Responder Con Cita
  #7  
Antiguo 14-11-2006
fausto fausto is offline
Registrado
 
Registrado: feb 2006
Posts: 7
Poder: 0
fausto Va por buen camino
Hola de nuevo.

Lo de cerrar la conexión explícitamente es lo primero que probé, pero cuando hago el "Close" me da error ya que el objeto "Connection" es siempre nil. Si paso del "Close" y hago el "Free" (que no casca si el objeto ya es nil) pasa de mi y no libera la conexión. Sólo he conseguido que la libere con el "Free" del propio objeto TADOQuery (cosa que no me vale).

[code]
miTADOQuery.Connection.Close; //aquí me da el error
miTADOQuery.Connection.Free;
miTADOQuery.Connection := nil;
[code]

El objeto TADOQuery lo declaro en la cabecera de la unidad "unit":

[code]
type
miTADOQuery: TADOQuery;
[code]

En el método "FormCreate" le pongo la conexión:

[code]
miTADOQuery.ConnectionString := CadenadeConexion; //CadenadeConexion tiene valor correcto seguro
[code]

en mi método X lo utilizo:

[code]
miTADOQuery.Parameters.ParamByName('nombreP¡_parametro').Value := 0;
miTADOQuery.Open;
miTADOQuery.First;
//lo recorro
While not miTADOQuery.Eof do
//...
end;
[code]

Y al final:

[code]
miTADOQuery.Connection.Close; //esto siempre es nil!!!!
miTADOQuery.Connection.Free;
miTADOQuery.Connection := nil;
[code]

Llevo poco tiempo en esto de Delphi, pero esto me está volviendo loco.
¿Que estoy haciendo mal?
(Perdón si no he utilizado las etiquetas para código delphi bien...)
Responder Con Cita
  #8  
Antiguo 14-11-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se agradece el intento de utilizar TAGS, aunque no lo has hecho corretamente; Revisa este link.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 14-11-2006
fausto fausto is offline
Registrado
 
Registrado: feb 2006
Posts: 7
Poder: 0
fausto Va por buen camino
Ok. Gracias por la indicación de los tags.

Y, por fin, creo haber solucionado ya el problema.
Al fin y al cabo era lo que todos me habéis ido contestando pero, dado mi poco conocimiento de Delphi, no lo he pillado.

He creado un objeto TADOConnection y se lo he asignado a mi TADOQuery. de esta forma si funciona cerrando y liberando la conexión sin necesidad de liberar el objeto TADOQuery.

Gracias a todos, perdón por las molestias y hasta la próxima.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Poner 0 cuando el resultado en null victork_py Firebird e Interbase 24 19-04-2014 09:53:26
cambiar campo null a not null andressanchez Firebird e Interbase 8 18-09-2006 22:00:09
Poner un campo de fecha a 'Null' gluglu Varios 5 29-11-2005 23:43:07
TADODataSet VS TADOQuery Mauro.NET Conexión con bases de datos 1 24-05-2005 19:39:57
Error con el Tadoquery jas010 SQL 2 03-03-2005 23:32:07


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


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