Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2003
mguixot mguixot is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 21
mguixot Va por buen camino
Acceso a componente de formulario padre????

Hola gente,
me ha surgido el problema de como acceder a una IBQuery de un componente padre, es decir. Realizo una consulta en el formulario padre, y se asigno el DataSource de la consulta a un DBGrid de un formulario hijo, que creo inmediatamente despues de calcular la Query. Pero cuando ejecuto el programa, me da un error de violacion de memoria , al intentar acceder a algun valor de algun campo de la consulta realizada en el formulario padre.
Alguien sabe como ayudarme?.

Muchas gracias.

Saludos.
Responder Con Cita
  #2  
Antiguo 10-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
por regla general, yo te aconsejaria que los TQuery, TTables, ..... los pongas en un DataModule y que este lo pongas en el uses del form donde lo necesites, de esta manera te evetaras problemas.

Respecto a lo que te pasa es que seguramente estas haciendo una referencia estilo

FormPadre.Query1.Field[1].Value

no?

Esto es seguramente (ya que no pones nada de codigo ni la linea en que te salta el Acces Violation) porque FormPadre no lo tengas en el uses del form desde donde lo llamas

Si no es eso, pon algo de codigo y la linea donde te salta el error e intentaremos afinar mas la respuesta
Responder Con Cita
  #3  
Antiguo 11-06-2003
mguixot mguixot is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 21
mguixot Va por buen camino
Respecto a mi problema planteado anteriormente, aqui incluyo algunas pistas mas, para intentar solucionalo.

Codigo de creacion del formulario hijo:

with TVisualizacionFactura.Create(Self) do
try
SMDBGrid2.DataSource := DataSource1;
frDBDataSetFacturas.DataSource := DataSource1;
DBNavigator1.DataSource := DataSource1;
ShowModal;
finally
free;
end;


Codigo de acceso a los datos del formulario padre:

ShowMessage(FloatToStr( ListadoFactura.IBQueryFacturasDeuda.Value));


En el formulario padre, tenemos declarada una 'IBQueryFacturas', dnd intentamos acceder al campo 'Deuda', pero la aplicacion genera una excepcion de EAccesViolation ...


Saludos y muchas gracias
Responder Con Cita
  #4  
Antiguo 11-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 21
Bacterion Va por buen camino
Aquí:

with TVisualizacionFactura.Create(Self) do
try
SMDBGrid2.DataSource := DataSource1;
frDBDataSetFacturas.DataSource := DataSource1;
DBNavigator1.DataSource := DataSource1;

// podrías haber creado una propiedad o método
// que al pasarle un Datasource ya se encargara el solo
// de asignarlo donde se necesitara. (por comodidad, digo yo).

ShowModal;
finally
free;
end;

Creas un TVisualizacionFactura (supongo que el form que muestra
los datos de la factura)... bueno...

Y supongo que con
ShowMessage(FloatToStr( ListadoFactura.IBQueryFacturasDeuda.Value));
intentas acceder al padre por medio de la referencia LISTADOFACTURA.

Pero... ¿Tiene asignado al padre?
Generalmente, una violación de acceso, viene provocada por el uso de una referencia invalida (supongo que a nil).
¿Le has pasado al formulario hijo el formulario Padre? Vamos, ¿LISTADOFACTURA := Padre?
¿o es listadofactura es la variable que te crea el delphi cuando te crea un form y resulta que no la estás usando?

De todas formas, para lo que haces no requieres conocer el form padre. En el DataSource que pasas YA TIENES el DATASET en el cual buscas info, luego haz algo del estilo:
ShowMessage(FloatToStr( SMDBGrid2.DataSource.Dataset.FieldByName('UnoDeLosCampos').AsLoqueToque));
Responder Con Cita
  #5  
Antiguo 11-06-2003
oesteve oesteve is offline
Miembro
 
Registrado: jun 2003
Posts: 13
Poder: 0
oesteve Va por buen camino
yo lo que haria es contestarle a oesteve
Responder Con Cita
  #6  
Antiguo 11-06-2003
mguixot mguixot is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 21
mguixot Va por buen camino
Muchas gracias, tio

la opcion de obtener los datos de DBGrid, era una de las alternativas que tenia en mente, pero lo habia intentado, mediante el SelectedRows y tal, pero no lo habia conseguido, por eso andaba un poco desesperado, al no poder acceder a unos datos, que tenia visible delante de mis narices.

en fin, muchas gracias a todos, de nuevo.

Saludos desde Alicante.
Responder Con Cita
  #7  
Antiguo 11-06-2003
pedrohdez pedrohdez is offline
Miembro
 
Registrado: may 2003
Ubicación: Murcia
Posts: 54
Poder: 21
pedrohdez Va por buen camino
Hola mguixot,

Una ultima recomendación, procura no programar como comentas, por ejemplo, si tienes una ventana hija y le quieres pasar un DataSource, crea una propiedad y que al asignarla se ocupe de modificar sus objetos internos, pero no des valores desde "fuera".
Otro asunto es el problema haciendo referencia al objeto Padre, (aunque el fondo del asunto es el mismo) no debes hacer referencia por el nombre, sobre todo tus ventanas no son de creación automatica, esa referencia es falsa y te dara montones de problemas, para acceder al padre usa self.owner, pero siempre es mejor pasarle las referencias a los objetos que necesites a propiedades de la vent. hija y no tocar objetos de la ventana padre "a pelo".

PD parece que los hilos se han liado algo, aparece uno de oesteve que no se a cuento de que y cuando voy a responder veo que hay un ultimo mensaje de mguixot
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


La franja horaria es GMT +2. Ahora son las 14:04:49.


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