![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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; 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 |
#2
|
||||
|
||||
Supongo que primero convendría tratar de saber exactamente donde y porque se pierde la conexicón....
![]()
__________________
|
#3
|
||||
|
||||
Como dice ContraVeneno, infórmanos un poquito más
![]() 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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
![]() Pues eso, te importaría decirme cómo lo solucionaste.
Gracias. |
#5
|
||||
|
||||
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
![]() 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) Gracias por compartir la sabiduría Última edición por Jesús Pena fecha: 01-12-2005 a las 19:03:17. |
![]() |
|
|
![]() |
|