Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Neftali Ver Mensaje
En ejecución deberías poder capturar ese error sin problemas, si redefines el método Create del formulario.

Código Delphi [-]
private
  constructor Create(AOwner: TComponent); override;
  ...

No lo he probado, pero debería funcionar.
No estoy tan seguro. Ten en cuenta que lo primero que hay que hacer en el constructor es llamar al constructor heredado para reservar la memoria. Esto hace (si no recuerdo mal, y en este caso) que también se creen los componentes y se establezcan los valores de sus propiedades.

Lo que sí podría intentarse es capturar la excepción. Algo así como:
Código Delphi [-]
CONSTRUCTOR TForm.Create (AOwner: TComponent);
BEGIN
  TRY
     INHERITED Create (AOwner)
  EXCEPT
    ON Error: Exception DO
    BEGIN
       { ¿ignorarlo? }
    END
  END
END;
Lo ideal aquí sería usar una clase de excepción del ADO Connection para discriminar.
Responder Con Cita
  #2  
Antiguo 11-06-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Ñuño Martínez Ver Mensaje
No estoy tan seguro.
Ten en cuenta que lo primero que hay que hacer en el constructor es llamar al constructor heredado para reservar la memoria. Esto hace (si no recuerdo mal, y en este caso) que también se creen los componentes y se establezcan los valores de sus propiedades.
Es correcto, por eso creo que funciona.

Si redefines el Create de la Clase (TForm), En el "redefinido" podrás capturar la excepción que se levante desde el de la clase TForm. Realmente Se hace el Create y luego el Loaded (que carga los valores desde el DFM). Si el inherited en la clase redefinida (tal y como has puesto tú) está dentro del try..except, podrás capturar la excepción sin problemas.

Cita:
Empezado por Ñuño Martínez Ver Mensaje
Lo que sí podría intentarse es capturar la excepción. Algo así como:
Eso es lo que quería decir con esta frase:
Cita:
Empezado por Neftali Ver Mensaje
En ejecución deberías poder capturar ese error sin problemas, si redefines el método Create del formulario.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-06-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Hace tiempo, años, hablamos sobre esto y diversos componentes de conexión a BD que controlaban ese problema. A ver si lo encuentro...
Responder Con Cita
  #4  
Antiguo 11-06-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pero no es lo mas logico que en tiempo de diseño la propiedad Connected este siempre a False, y luego se conecte en el momento mas apropiado (= un evento)?

En mi caso particular el connection string lo defino tambien en tiempo de ejecucion, en el evento OnBeforeConnect del Connection. Luego en el OnCreate del DataModule realizo el Conneciton.Open
Responder Con Cita
  #5  
Antiguo 11-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
AgustinOrtu,

Cita:
Empezado por AgustinOrtu
...no es lo mas lógico que en tiempo de diseño la propiedad Connected este siempre a False, y luego se conecte en el momento mas apropiado...


Nelson.
Responder Con Cita
  #6  
Antiguo 11-06-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Pero no es lo mas logico que en tiempo de diseño la propiedad Connected este siempre a False, y luego se conecte en el momento mas apropiado (= un evento)?
Por lo que comenta, el problema es que se le olvida desactivarlo a veces.
Es lógico que la conexión esté abierta en diseño, pues algunas operaciones con tablas/querys y grids, requieren que esté así, por ejemplo cuando ase añaden campos.

Si al generar el EXE no recueradas desactivarla, la conexión queda abierta.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 12-06-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Por lo que comenta, el problema es que se le olvida desactivarlo a veces.
Es lógico que la conexión esté abierta en diseño, pues algunas operaciones con tablas/querys y grids, requieren que esté así, por ejemplo cuando ase añaden campos.

Si al generar el EXE no recueradas desactivarla, la conexión queda abierta.
Buenas German, pero aun asi y todo, si uno provee la ConnectionString en el BeforeConnect no deberia dispararse el evento y asignar una conexion correcta?

Sino la otra posibilidad que se me ocurre es tener otro archivo .dfm de DataModule en cuestion, y utilizar directivas de compilacion para indicar que cuando compile en release utilice el .dfm sin la conexion

Otra forma pero que requiere mas "trabajo" es usar git o algun control de versiones. Siendo mas o menos cuidadoso estos deslices los encontras facilmente al momento de realizar los commit

Última edición por AgustinOrtu fecha: 12-06-2015 a las 05:13:09.
Responder Con Cita
  #8  
Antiguo 12-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La verdad, es que la situación sigue sin quedarme clara...
Cita:
...lo he puesto en el datamodulecreate pero los valores los carga antes.
Como yo lo veo, cuando intente cargar los valores (mediante un un TADOLoqueSea) antes de estar creado el TDataModule, y por lo tanto el TADOConnection que allí está radicado, obtendríamos un lindo mensaje de "Missing connection or ConnectionString". No tiene sentido hablar de que esté o no conectado cuando aún no ha sido creado.

Cita:
hay alguna forma automatica de hacer que el connected siempre este a false al compilar o antes de arrancar la aplicacion
Si, una simple comprobación de su propiedad Connected en la creación del TDataModule, nos dá la posibilidad de accionar:
Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  if ADOConnection1.Connected then // ¿ Me quedó abierto ?
    ADOConnection1.Close;          // entonces lo cierro

  // Hago lo que corresponda y continúo...
end
Claro está, que si el TDataModule esta en auto-create forms, tendrá que tener mayor precedencia que el módulo que intenta referenciarlo. Y, si se crea en tiempo de ejecución, la llamada a la creación también deberá ser previa al uso del mismo.

Por favor corríjanme si estoy malentendiendo el problema.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 12-06-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
...si uno provee la ConnectionString en el BeforeConnect no deberia dispararse el evento y asignar una conexion correcta?
Correcto.
Esta opción también debería funcionar y también me parece buena.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
excepciones con TADOConnection JuanPa1 Conexión con bases de datos 5 18-07-2007 22:49:09
TAdoConnection Genner Conexión con bases de datos 1 16-11-2006 10:03:37
Desconectar FlashMemory Deiv Windows 6 31-01-2006 04:52:22
Servicio con TADOConnection Duc Conexión con bases de datos 0 27-07-2005 14:08:14
TADOConnection/TADOStoredProc arantzal Varios 5 04-02-2005 11:23:06


La franja horaria es GMT +2. Ahora son las 23:33:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi