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)
-   -   Cerrar conexion con ADO (https://www.clubdelphi.com/foros/showthread.php?t=77333)

Perenquen 16-01-2012 15:00:06

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.

olbeup 17-01-2012 09:07:43

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.

Perenquen 17-01-2012 09:46:45

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.

olbeup 17-01-2012 11:55:02

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.

Perenquen 18-01-2012 09:17:01

OK, muchas gracias.


La franja horaria es GMT +2. Ahora son las 04:15:31.

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