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)
-   -   Problemas con las conexiones a datos (https://www.clubdelphi.com/foros/showthread.php?t=27740)

Jesús Pena 29-11-2005 17:39:01

Problemas con las conexiones a datos
 
Tengo un problema que paso a comentar, estoy desarrollando una aplicación en la que tengo forms para captura de datos y reports para visualizarlos (QuickReport 4.06) y cada uno de ellos tiene un datamodule asociado en el que hago las conexiones oportunas (por ej. Form frmXXXXX datamodule asociado dmXXXXX). La cosa es que, y no sé en qué circunstancia se produce, que de vez en cuando se pierde la conexión de los datasources del formulario con los dataset del datamodule. Se me ha ocurrido controlarlo por código de esta forma
Código:

  if Not dsPrincipal.dataset.IsLinkedTo(dmAgencias.IBTAgencias) then
        dsPrincipal.DataSet := dmAgencias.IBTAgencias;

y al ejecutarse (cuando pierde la conexión, es decir el datasource del formulario no tiene dataset del datamodule asociado) me dá error en dbrtl90.dll y no vá.

Alguno sabe la forma de corregirlo por código, es que si no lo controlo de esta forma corro el riesgo de que se pierda la conexión en algun sitio de la aplicación y falle

ContraVeneno 29-11-2005 17:45:13

Supongo que primero convendría tratar de saber exactamente donde y porque se pierde la conexicón.... :confused: y a partir de ahí tratar de solucionar tu problema.

Casimiro Notevi 29-11-2005 20:44:59

Como dice ContraVeneno, infórmanos un poquito más :D

Recuerdo que lo que comentas ocurría bastante con Delphi 4, hasta el punto que me acostumbré a asignarlo siempre por código.

Después, con Delphi 5, 6 y 7 no me ha vuelto a pasar nunca.

Jesús Pena 30-11-2005 16:47:11

Te importaría decirme cómo
 
Pues eso, te importaría decirme cómo lo solucionaste.

Gracias.

Casimiro Notevi 30-11-2005 22:32:25

Cita:

Empezado por Jesús Pena
Pues eso, te importaría decirme cómo lo solucionaste.

Gracias.

Pues eso, te importaría darnos más información ;)

Jesús Pena 01-12-2005 00:23:49

Pues no se bien cuando sucede
 
El caso es que en diseño todo esta correcto (aparentemente). En el onCreate del datamodule abro las tablas (en el datamodule no tengo datasources, salvo en aquellas que tienen estructura de maestro/detalle), en el create del form creo el datamodule, esto todo por código.
En diseño abro las bases de datos y asocio en el formulario dos datasouces de cada tabla (hago lo mismo en el caso de que se trate de informes - utilizo QuickReport) y en algunas ocasiones se pierde la asociación de los datasources y las tablas correpondientes pero no sabría decirte cuando. Lo soluciono abriendo bien el formulario bien el report y estableciendo otra vez las correpondencias y así cada vez que ocurre.

Una pregunta ¿donde me recomiendas que ponga los datasources? en los datamodule y hacer referencia en los objetos de acceso a datos a los datasources del datamodule o crear los datasources en los formularios (o reports) y asociarlos con las tablas del datamodule.

Casimiro Notevi 01-12-2005 13:04:55

En Delphi 4 lo asignaba a mano por código, creo recordar que en el oncreate del form (tendría que confirmártelo), es lo único "seguro" que encontré para que no se perdiera la asignación.
Luego con Delphi 5 me ocurrió en alguna ocasión (muy pocas), y con delphi 6 y 7 no me ha pasado nunca hasta ahora.

En cuanto a los DataSources, yo los pongo en el form y los querys,transaction,database,etc los suelto en un DataModule para tener acceso a ellos desde los distintos forms que lo necesiten.

Jesús Pena 01-12-2005 19:00:13

Eso es lo que intento
 
Lo que pretendo es precisamente eso hacerlo por código, lo intento con el código descrito a continuacion
Código:

dmClientes := nil; // datamodule
dmClientes := TdmClientes.Create(Self); // creación del datamodule
pDmConectado := dmClientes.fConectado; // si todo ha ido correcto o no
if not pDmConectado then
begin
        MessageDlg('Error de Conexión con la Base de Datos de Clientes',mtError,[mbOk],0);
        Close; // si no muestro mensaje y cierro el formulario
end;
if Not dsPrincipal.dataset.IsLinkedTo(dmClientes.IBTClientes) then
        dsPrincipal.DataSet := dmClientes.IBTClientes; // aquí es donde me dá el access violation (cuando pierde la conexión)

lo que ocurre es que al hacer la asignación del datasource (dsprincipa) da un access violation ¿que estoy haciendo mal?

Gracias por compartir la sabiduría


La franja horaria es GMT +2. Ahora son las 03:13:34.

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