Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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;
Responder Con Cita
  #4  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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;
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 23-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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????
Responder Con Cita
  #6  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 23-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por Roger
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.
No, si te estaba preguntando si era eso lo que hacías, es que no lo veo claro
Responder Con Cita
  #8  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

creo que no has visto mi respuesta anterior...

Cita:
Ayudaaaaaaaaa
Sabias que este estiramiento de vocales nos gusta muuuuuuuuuuuyyyyyy poco por aqui???
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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
Responder Con Cita
  #12  
Antiguo 23-04-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
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


La franja horaria es GMT +2. Ahora son las 12:11:29.


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