PDA

Ver la Versión Completa : Cerrar conexion con ADO


Perenquen
16-01-2012, 15:00:06
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.

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.


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.
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.