decuteo
06-06-2008, 08:36:02
Hola a todos...
Bueno, la verdad es que estoy bastante agobiado... después de pelearme con mi D7 + ADO + MySql simulando escenarios con VMWare virtualizando máquinas, buscar info por la red, ya no se que hacer, estoy por enviarlo todo a la...
Para valorar una migración, he hecho una pequeña prueba con MySQL consistente en cuatro campos que hacen lo más típico en una BD, es decir, insertar, editar, eliminar y buscar, sin olvidar el tema de control (muy por encima) de los bloqueos y protección de las transacciones a la BD.
He leído y leído multitud de cosas sobre el ADOConnection, ADOQuery, ADOTable, ADOStoredProc que no difieren mucho de los nativos, bien.
En los preliminares, francamente me quedé asombrado, por la facilidad de acceso a una Base de datos en un servidor remoto, y siguiendo los consejos de poliburro aunque inicié mis pinitos con Zeos me pasé a ADO como el me comentaba.
Pero... y aquí viene el problema, pierdo la conexión con la BD. Al iniciar la aplicación todo funciona correctamente, pero al cabo de unos 20 segundos pierdo la conexión y ya puedo hacer todos los ADOConnection.Open que quiera que nada de nada, para volver a recuperar la conexión de bo reiniciar la aplicación.
He mirado todo lo referente a ConnectionTimeout, KeepConnection y CommandTimeOut, lo único que he logrado es manener la conexión unos 2 min. pero me parece absurdo mantener una conexión abierta si no estas haciendo nada.
por poner un ejemplo, el siguiente codigo funciona a la perfección cuando inicio la aplicación pero al cabo de 30 segundos me salta la excepción.
procedure TForm1.otro_mas();
var
sql1,sql2:String;
begin
try
Screen.cursor:=crSQLWait;
ADOConnection.Open; //ADOConnection1 ya dispone de su ConnectionString propia.
ADOConnection1.BeginTrans
if existe_dato = true then
begin
With Aquery1 do
begin
SQL.Clear;
Parameters.Clear;
ConnectionString:=conexion_server(1); // 0:virtual, 1:remoto, 2:local
sql1:='INSERT INTO pruebas ( eh_fec,eh_des,eh_cat,eh_sim,eh_desc,eh_link,eh_post,eh_ubic,eh_pass,eh_tipo )';
sql2:=' VALUES ( :d_fec,:d_des,:d_cat,:d_sim,:d_descarga,:d_link,:d_post,:d_ubi,:d_pass,:d_tipo )';
SQL.Add(sql1);
SQL.Add(sql2);
Parameters.ParamByName('d_fec').Value:=fecha.Date;
Parameters.ParamByName('d_des').Value:=descripcion.Text;
Parameters.ParamByName('d_cat').Value:=categoria.Items[categoria.ItemIndex];
Parameters.ParamByName('d_sim').Value:=simulador.Items[simulador.ItemIndex];
Parameters.ParamByName('d_descarga').Value:=lotengo;
Parameters.ParamByName('d_link').Value:=links.Text;
Parameters.ParamByName('d_post').Value:=Post.Text;
Parameters.ParamByName('d_ubi').Value:=ubicacion.Text;
Parameters.ParamByName('d_pass').Value:=pass.Text;
Parameters.ParamByName('d_tipo').Value:=tipo_soft.Items[tipo_soft.ItemIndex];
Open;
end;
ADOConnection1.CommitTrans;
end
else
ShowMessage('Este Post ya existe');
botones(0,0,1,1,1,0);
muestra_parrilla();
except
on E: Exception do
begin
ADOConnection1.RollbackTrans;
Application.MessageBox( '[E0010]-Existe algún problema, no se completo la operación', 'ERROR !!!, MB_ICONSTOP );
Form1.FormStyle:=fsNormal;
screen.Cursor:=crDefault;
end;
end;
screen.Cursor:=crDefault;
limpia_campos();
desconectar();
end;
Con posterioridad he visto que hay unas Propiedades deniminadas BeginTrans,CommitTrans y RollbackTrans, pero no he sabido encontrar información aclaradora al respecto y lo poco que he hecho con ellas tampoco me ha funcionado.
He encontrado información sobrelas propiedades antes mencionadas, he editadop el post para añadir las últimas modificaciones que he realizado en el código, sin éxito, sigo perdiendo la conexión.
Me podeis hechar una mano?
Un saludo
Juanjo
Bueno, la verdad es que estoy bastante agobiado... después de pelearme con mi D7 + ADO + MySql simulando escenarios con VMWare virtualizando máquinas, buscar info por la red, ya no se que hacer, estoy por enviarlo todo a la...
Para valorar una migración, he hecho una pequeña prueba con MySQL consistente en cuatro campos que hacen lo más típico en una BD, es decir, insertar, editar, eliminar y buscar, sin olvidar el tema de control (muy por encima) de los bloqueos y protección de las transacciones a la BD.
He leído y leído multitud de cosas sobre el ADOConnection, ADOQuery, ADOTable, ADOStoredProc que no difieren mucho de los nativos, bien.
En los preliminares, francamente me quedé asombrado, por la facilidad de acceso a una Base de datos en un servidor remoto, y siguiendo los consejos de poliburro aunque inicié mis pinitos con Zeos me pasé a ADO como el me comentaba.
Pero... y aquí viene el problema, pierdo la conexión con la BD. Al iniciar la aplicación todo funciona correctamente, pero al cabo de unos 20 segundos pierdo la conexión y ya puedo hacer todos los ADOConnection.Open que quiera que nada de nada, para volver a recuperar la conexión de bo reiniciar la aplicación.
He mirado todo lo referente a ConnectionTimeout, KeepConnection y CommandTimeOut, lo único que he logrado es manener la conexión unos 2 min. pero me parece absurdo mantener una conexión abierta si no estas haciendo nada.
por poner un ejemplo, el siguiente codigo funciona a la perfección cuando inicio la aplicación pero al cabo de 30 segundos me salta la excepción.
procedure TForm1.otro_mas();
var
sql1,sql2:String;
begin
try
Screen.cursor:=crSQLWait;
ADOConnection.Open; //ADOConnection1 ya dispone de su ConnectionString propia.
ADOConnection1.BeginTrans
if existe_dato = true then
begin
With Aquery1 do
begin
SQL.Clear;
Parameters.Clear;
ConnectionString:=conexion_server(1); // 0:virtual, 1:remoto, 2:local
sql1:='INSERT INTO pruebas ( eh_fec,eh_des,eh_cat,eh_sim,eh_desc,eh_link,eh_post,eh_ubic,eh_pass,eh_tipo )';
sql2:=' VALUES ( :d_fec,:d_des,:d_cat,:d_sim,:d_descarga,:d_link,:d_post,:d_ubi,:d_pass,:d_tipo )';
SQL.Add(sql1);
SQL.Add(sql2);
Parameters.ParamByName('d_fec').Value:=fecha.Date;
Parameters.ParamByName('d_des').Value:=descripcion.Text;
Parameters.ParamByName('d_cat').Value:=categoria.Items[categoria.ItemIndex];
Parameters.ParamByName('d_sim').Value:=simulador.Items[simulador.ItemIndex];
Parameters.ParamByName('d_descarga').Value:=lotengo;
Parameters.ParamByName('d_link').Value:=links.Text;
Parameters.ParamByName('d_post').Value:=Post.Text;
Parameters.ParamByName('d_ubi').Value:=ubicacion.Text;
Parameters.ParamByName('d_pass').Value:=pass.Text;
Parameters.ParamByName('d_tipo').Value:=tipo_soft.Items[tipo_soft.ItemIndex];
Open;
end;
ADOConnection1.CommitTrans;
end
else
ShowMessage('Este Post ya existe');
botones(0,0,1,1,1,0);
muestra_parrilla();
except
on E: Exception do
begin
ADOConnection1.RollbackTrans;
Application.MessageBox( '[E0010]-Existe algún problema, no se completo la operación', 'ERROR !!!, MB_ICONSTOP );
Form1.FormStyle:=fsNormal;
screen.Cursor:=crDefault;
end;
end;
screen.Cursor:=crDefault;
limpia_campos();
desconectar();
end;
Con posterioridad he visto que hay unas Propiedades deniminadas BeginTrans,CommitTrans y RollbackTrans, pero no he sabido encontrar información aclaradora al respecto y lo poco que he hecho con ellas tampoco me ha funcionado.
He encontrado información sobrelas propiedades antes mencionadas, he editadop el post para añadir las últimas modificaciones que he realizado en el código, sin éxito, sigo perdiendo la conexión.
Me podeis hechar una mano?
Un saludo
Juanjo