FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Bases de datos en componentes vcl
Primero que todo perdonad mis continuas preguntas.
He creado un componente con una propiedad basesdedatos (TDataBase). Luego tengo un formulario dentro del componente con los dataset's. Cuando hago el create del componente enlazo los data sets con la base de datos que le he puesto en la propiedad y me da un error. Hago lo siguiente: Form1.DataSet1.DataBase:=FBaseDeDatos He visto en internet algo de la clase TDataLink pero tampoco se usarla ni se si es lo que necesito. A ver si me echais un cable. Gracias |
#2
|
||||
|
||||
entiendo que tu componenete es un componente no visual, que crea un formulario que contiene una base de datos, y varios datasets... (TTable, TQuery), no??
Si es asi, no tenes que asignar en el Create del componente la base de datos. Podes asignarla en tiempo de diseño del componente... y cuando crees el formulario, estas se auto-enlazarán con la base de datos. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
El formulari no contiene una base de datos solo contiene dos data set, yo le tengo que pasar la base de datos para conectarlos mediante la propiedad que he creado BaseDeDatos. Luego para enlazarlos lo hago en el create, mediante:
Form1.DataSet1.Databes:=FBaseDeDatos; |
#4
|
||||
|
||||
Entonces no asignes la base de datos a los datasets en el Create, sino en el método virtual Loaded. El porque se lo dejo a la ayuda de delphi...
Igual, si tenes un método SetDatabase, hacé la verificación siguiente: Código:
if not (csLoading in ComponentState) then Form1.DataSet1.Database := FBaseDeDatos;
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
Sigo sin entenderlo
Tu tienes un Formulario que contiene 2 dataset. Luego "pegas" tu componente y quieres que los datasets del formulario obtengan en su propiedad Database lo que tu componente tenga en su propiedad BaseDeDatos???? |
#6
|
|||
|
|||
Ok cadetill. ya se que seria mas facil poner la base de datos dentro del formulario pero no puedo, porque uno de los requisitos que tengo que cumplir es que les pase la base de datos.
|
#7
|
|||
|
|||
Cita:
|
#8
|
|||
|
|||
Lo preguntare de otra forma:
Como se pede conectar la propiedad FBaseDeDatos (TDataBase) con un data set????? La siguiente forma da error: Form1.DataSet.DataBase:=FBaseDeDatos; Ayudaaaaaaaaa |
#9
|
||||
|
||||
creo que no has visto mi respuesta anterior...
Cita:
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#10
|
|||
|
|||
jachaguete, perodon po no responderte. No me funciona. El problema no es que sea en el create. Con lo que tu me has puesto no entra en el if y no me hace nada. Por lo que parece hace falta algo para hacer la conexion. Ni idea.
|
#11
|
||||
|
||||
parece que no has leido la ayuda.
Claro que no entrará en el if durante la carga del componente en tiempo de ejecución, precisamente por eso hay que ponerlo... la propiedad se asignará por primera vez en el método Loaded. Luego, si el valor de la propiedad cambia (despues de cargados todos los componentes) si que entrará en el if en el SetDataBase, con lo que funcionará normalmente. hasta luego, y por favor, lee la ayuda de Loaded y de csLoading (en ComponentState).
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#12
|
|||
|
|||
Perdonadme
Ahun no habia creado el formulario y ya me estaba refiriendo a componentes de el. Pues estaba ya atrancada aqui desde ayer. Lo siento mucho haberos hecho perder el tiempo. |
#13
|
||||
|
||||
No hay problema... a todos nos ha pasado alguna vez... Menos mal te leiste la ayuda.
De cualquier forma, vale aclarar, que aunque ya hubieses creado el formulario (de hecho debieras hacerlo en el constructor de tu componente, que se ejecuta antes del SetDataBase), lo que muy probablemente no se habia Creado era el TDataBase asociado (un peer, o hermanito pues...), ya que durante la carga del formulario, los componentes se crean según el orden en que vienen en el DFM. Sin embargo, ya tenias una referencia a ese componente inexistente aún (una dirección de memoria inválida). El invento de Loaded precisamente solventa esta situación, y es llamado para todos los componentes cuando se ha terminado de crear todo lo contenido en el DFM. Es la primera vez que las referencias a otros componentes con seguridad serán válidas. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|