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 06-06-2008
decuteo decuteo is offline
No confirmado
 
Registrado: abr 2006
Posts: 18
Poder: 0
decuteo Va por buen camino
Tiro la toalla? D7+ADO+MySql

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.

Código:
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

Última edición por decuteo fecha: 06-06-2008 a las 11:03:52. Razón: Ampliar código después de nuevas pruebas sin éxito
Responder Con Cita
  #2  
Antiguo 06-06-2008
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
Cita:
Empezado por decuteo Ver Mensaje

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.

Pienso que el problema no está en ADO. Me explico, mysql tiene un tiempo de vida predefinido para las conexiones, terminado ese tiempo las cierra.

Pero vayamos por partes.

podrías indicar versión del conector odbc que utilizas?
Versión de mysql?
El servidor con mysql es un equipo físico o virtualizado?
El programa corre en una máquina física?, virtualizada? o en el mismo servidor de mysql?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 06-06-2008
decuteo decuteo is offline
No confirmado
 
Registrado: abr 2006
Posts: 18
Poder: 0
decuteo Va por buen camino
La versión de MySQL - 5.0.51a
Versión del Conector ODBC - Connector/ODBC 5.1

Cita:
Pienso que el problema no está en ADO. Me explico, mysql tiene un tiempo de vida predefinido para las conexiones, terminado ese tiempo las cierra.
Correcto, eso lo he verificado y por defecto (o al menos eso dicen los de MySQL http://dev.mysql.com/doc/refman/5.0/en/gone-away.html ) está configurado, desde el lado del servidor, para que cuando no exista actividad la conexión se cierre. Según ellos, bastaría con volver a abrir la conexión o reconectar para que el problema se solucionase, no es así. Ya que antes de hacer cualquier transacción abro la transacción y cuando acabo la cierro, por tanto la conexión no queda (o no debería) quedar abierta, eso lo hago con la función desconectar(), que simplemente es un ADOConnection1.Close, creo yo...


Cita:
podrías indicar versión del conector odbc que utilizas?
Connector/ODBC 5.1

Cita:
Versión de mysql?
MySQL - 5.0.51a

Cita:
El servidor con mysql es un equipo físico o virtualizado?
El programa corre en una máquina física?, virtualizada? o en el mismo servidor de mysql?
En todos los casos, físico, local y virtualizado el resultado es el mismo, en todos utilizo el mismo conector ODBC y MySQL (adapté el local y virtualizado al remoto).

Además, cuando probé con el remoto, en el servidor local paré el servicio de MySQL por si pudiera provocar alguna interferencia, para que una simple motita de polvo en el ojo no me dejase ver el muro que puedes tener delante, .

Es un error generalizado, por lo que he podido encontrar por "San Google", porque si pongo "Lost connection in ADO with MySql and Delphi" no te cuento los enlaces que hay !!!

Bueno... espero haberte clarificado el escenario o entorno donde me muevo.

Gracias por la respuesta.

Un saludo
Juanjo
Responder Con Cita
  #4  
Antiguo 06-06-2008
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
Cita:
Empezado por decuteo Ver Mensaje
Es un error generalizado, por lo que he podido encontrar por "San Google", porque si pongo "Lost connection in ADO with MySql and Delphi" no te cuento los enlaces que hay !!!

Bueno... espero haberte clarificado el escenario o entorno donde me muevo.

Gracias por la respuesta.

Un saludo
Juanjo
vaya, eso no me ha pasado (Debe ser por que ninguno de mis desarrollos usa conexiónes persistentes). un favor, para descartar ADO, has probado con zeos?, si no es así, podrías probar nuevamente a conectarte usando ZEOS. Si el problema no se repite es un asunto de ADO, y entonces tendrías que elegir entre usar zeos o el controlador ODBC anterior al 5.1. que de hecho ese aún lo uso, pues no he tenido tiempo de probar el nuevo.

Saludos.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 06-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
vaya, eso no me ha pasado (Debe ser por que ninguno de mis desarrollos usa conexiónes persistentes). un favor, para descartar ADO, has probado con zeos?, si no es así, podrías probar nuevamente a conectarte usando ZEOS. Si el problema no se repite es un asunto de ADO, y entonces tendrías que elegir entre usar zeos o el controlador ODBC anterior al 5.1. que de hecho ese aún lo uso, pues no he tenido tiempo de probar el nuevo.

Saludos.
Hola, yo uso ZEOS con Mysql y tengo el mismo problema que el amigo decuteo, la conexión no se mantiene y me sale el dichoso error "MYSQL is gone away", todavía no he dado con la solución, ya que un simple Connect no ayuda.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 06-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bueno, creo que he dado con la solución aunque no lo he probado, pero os dejo el link para que lo revisen:

http://drupal.org/node/259580

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #7  
Antiguo 06-06-2008
decuteo decuteo is offline
No confirmado
 
Registrado: abr 2006
Posts: 18
Poder: 0
decuteo Va por buen camino
Cita:
Empezado por enecumene Ver Mensaje
Bueno, creo que he dado con la solución aunque no lo he probado, pero os dejo el link para que lo revisen:

http://drupal.org/node/259580

Saludos.
enecumene, toda la razón del mundo mundial !!!

he modificado el my.ini del servidor MySql local y perfecto... ya no me saltaba el error, he reproducido las variables del servidor remoto en el local y... voilà !!! se reproduce el error.

Así que es un problema de la configuración del servidor MySQL, lo he probado en dos Hostings y ambos me dan el mismo problema, además no ofrecen la posibilidad de modificar los parámetros del server (lógico).

En definitiva, voy a ver si encuentro algún hosting que sí me permita modificar los parámetros del my.ini.

El proveedor me ha contestado (a la pregunta de poder modificar la configuración del server MySQL), que los cambios que proponía consumian muchos recursos del server... .

Gracias a todos... la cosa sigue en pie... jejejeje

un saludo
Juanjo
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
De un tiro espurio egostar La Taberna 1 02-11-2007 03:37:32
dos pajaros de un tiro Jheysson13 SQL 3 18-12-2006 19:28:12
Cual es la Diferencia entre la Matematica y la Toalla? Ingeniero Humor 0 02-04-2006 19:46:09
GunboundWC tiro perfecto locango Varios 1 12-07-2005 20:33:33


La franja horaria es GMT +2. Ahora son las 09:21:37.


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