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 16-01-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Cerrar conexion con ADO

Buenas. Estoy realizando una conexión a una base de datos MySQL utilizando ADO y me surgió un pequeño problema. Con una única conexión todo funciona bien.
Código Delphi [-]
procedure TFP.Button1Click(Sender: TObject);
var
  AQ1,AQ2 : TADOQuery;
 
begin
  AQ1 := TADOQuery.Create(nil);
  AQ1.Connectionstring := 'DRIVER={MySQL ODBC 5.1 Driver};SERVER=192.168.1.9;test;USER=root;PASSWORD=123456;OPTION=3';

  AQ1.SQL.Text := 'SELECT * FROM T1'; // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como se ha ESTABLECIDO la conexión
  AQ1.open;
  AQ1.close;
  AQ1.free;  // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como se ha CERRADO la conexión
  showmessage('OK');
end;

Como dije hasta aquí no había tenido problemas, pero cuando intento ejecutar dos consultas no soy capaz de liberar la conexión.

Código Delphi [-]
procedure TFP.Button1Click(Sender: TObject);
var
  AQ1,AQ2 : TADOQuery;
 
begin
  AQ1 := TADOQuery.Create(nil);
  AQ1.Connectionstring := 'DRIVER={MySQL ODBC 5.1 Driver};SERVER=192.168.1.9;test;USER=root;PASSWORD=123456;OPTION=3';

  AQ1.SQL.Text := 'SELECT * FROM T1'; // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como se ha ESTABLECIDO la PRIMERA conexión
  AQ1.open;
  
  AQ2 := TADOQuery.Create(nil);
  AQ2.Connectionstring := 'DRIVER={MySQL ODBC 5.1 Driver};SERVER=192.168.1.9;test;USER=root;PASSWORD=123456;OPTION=3';

  AQ2.SQL.Text := 'SELECT * FROM T2'; // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como se ha ESTABLECIDO la SEGUNDA conexión
  AQ2.open;

  AQ2.close;
  AQ2.free;  // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como NO se ha CERRADO la SEGUNDA conexión
  
  AQ1.close;
  AQ1.free;  // Después de esta instrucción puedo ver con un SHOW PROCESSLIST como se han CERRADO las DOS conexiones
  showmessage('OK');
end;

Obviamente estoy haciendo algo mal al trabajar con ADO. Alguno tiene alguna idea de que podría ser.

Gracias.
Responder Con Cita
  #2  
Antiguo 17-01-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Porque no utilizas TADOConnection para realizar la conexión, ésta es otra forma.
Código Delphi [-]
procedure TFP.Button1Click(Sender: TObject);
var
  Cnn: TADOConnection;
begin
  Cnn := TADOConnection.Create(nil);
    Cnn.ConnectionString :=  'DRIVER={MySQL ODBC 5.1 Driver};SERVER=192.168.1.9;test;USER=root;PASSWORD=123456;OPTION=3';
    Cnn.LoginPrompt := False;

  with TADOQuery.Create(nil) do
  begin
    Connection := Cnn;
    SQL.Add('SELECT * FROM T1');
    Open;
    Cnn.Close;
    Free;
  end;

  with TADOQuery.Create(nil) do
  begin
    Connection := Cnn;
    SQL.Add('SELECT * FROM T2');
    Open;
    Cnn.Close;
    Free;
  end;

  with TADOQuery.Create(nil) do
  begin
    Connection := Cnn;
    SQL.Add('SELECT * FROM T3');
    Open;
    Cnn.Close;
    Free;
  end;

  Cnn.Free;

  ShowMessage('OK');
end;
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 17-01-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Gracias por la respuesta.

Ya había probado a hacerlo con el TADOConnection, pero tampoco me funcionó en su momento. En el ejemplo que me pones abres y cierras la conexión, antes de abrir otra. Así me ha estado funcionando correctamente hasta ahora. Pero el problema me surgió cuando necesité abrir dos conexiones y liberar la segunda (dejando la primera operativa). También probé con dos ADOConnetion (que no se si es del todo correcto) pero tampoco me funcionó.

Por simplificar un poco la duda que tengo:

FUNCIONA CORRECTAMENTE
- establecer conexion cnn1
- trabajar con cnn1
- cerrar cnn1

FUNCIONA CORRECTAMENTE
- establecer conexion cnn1
- trabajar con cnn1
- cerrar cnn1

- establecer conexion cnn2
- trabajar con cnn2
- cerrar cnn2

NO ME FUNCIONA
- establecer conexion cnn1
- trabajar con cnn1

-establecer conexión cnn2
-trabajar con cnn2

-a partir de este punto si intento cerrar la cnn2 no ocurre nada, la conexión sigue activa en el PROCESLIST.

Espero no haber enredado mucho la questión y que me puedas echar un cable.

Un saludo y gracias nuevamente por el interés.
Responder Con Cita
  #4  
Antiguo 17-01-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Yo utilizo SQL SERVER y puedo abrir mas de 10 conexión a la vez sin ningún problema, de MySQL estoy pez, pero no tienes que tener problemas, sólo estas estableciendo una conexión y después la cierras, no se porque sigue activa.

Haber si algún compañero te puede aclarar ésta situación.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #5  
Antiguo 18-01-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
OK, muchas 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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo cerrar conexión? Delphi, Zeos y Postgres mangels PostgreSQL 4 16-11-2007 16:00:59
TcxTabSheet y cerrar LordRF OOP 4 23-03-2007 23:13:02
no cerrar Max_E. Varios 3 06-03-2007 17:01:57
Cerrar conexión al cerrar formulario arantzal Conexión con bases de datos 5 09-08-2006 12:43:52
Cerrar una aplicacion ??? Javier_A OOP 2 08-02-2006 09:32:20


La franja horaria es GMT +2. Ahora son las 09:12:23.


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