Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2018
vicens22 vicens22 is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 61
Poder: 14
vicens22 Va por buen camino
Acceso desde un formulario y sus objetos desde otro

Estoy desarrollando un proyecto con Delphi Berlin y Firemonkey y me encuentro con el siguiente problema, que intuyo que es básico, pero no consigo encontrarle solución.

Se trata simplemente de como acceder a objetos (variables y campos de edición que están en un formulario desde otro).
En las pruebas iniciales, tenía tan solo dos formularios y no tuve problema para acceder desde Form2 a variables y objetos que estaban en Form1 (el cual era el formulario principal del proyecto "Main Form" en options).

En cuanto he añadido más módulos y Form1, ha dejado de ser el formulario principal, el acceso al mismo desde el segundo formulario (Form2) no es posible, dándome error al intentarlo y pudiendo comprobar al hacer "debug" que no es posible el acceso a Form1.

A continuación está el código simplificado de ambos formularios, concretamente el error lo da en las siguientes lineas:

uQProvin.SQL.Text :='select * from ' + Form1.cBase + '.dbo.Provincias order by cNomPrv';

Form1.lEditProvin.items.Clear;

Gracias por cualquier aclaración o sugerencia.
Saludos,

Código Delphi [-]
/******************* Formulario 1 **************

Unit uForm1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,.

type
TForm1 = class(TForm)
lEditProvin: listEditor;
procedure ....

{ Private declarations }

public
{ Public declarations }
cBase, cCodFotos, RemoteServer: string;
nCodFotos: integer;

public
end;

var
fForm1: TForm1;

implementation

uses uLogin, uForm2;
......

/// ******************* Formulario 2 *****************************

unit uForm2;

interface

uses
System.SysUtils, .......

type
TfForm2 = class(TForm)
FooterLayout: TLayout....

private
{ Private declarations }
public
{ Public declarations }
end;

var
fForm2: TForm2;

implementation

uses uLogin, uForm1;

procedure TfForm2.FormCreate(Sender: TObject);
var lLocate: boolean;
SearchOptions: TLocateOptions;
sFields: TStringList;
i: integer;
begin

begin
With ClientModule1 do
begin
uQProvin.Close;
uQProvin.SQL.Text :='select * from ' + Form1.cBase + '.dbo.Provincias order by cNomPrv';
uQProvin.Open;
end;

Form1.lEditProvin.items.Clear;

end;

end;
Responder Con Cita
  #2  
Antiguo 25-04-2018
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.237
Poder: 20
ElKurgan Va camino a la fama
En principio no puedes/debes tener declaraciones en Form1 de Form2 en la parte "implementation" y viceversa, ya que crea referencias cruzadas entre los formularios.

Uno debes declararlo en la parte "Interface" y otro en la parte "Implementation" para evitar ese problema

Saludos
Responder Con Cita
  #3  
Antiguo 25-04-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Sugerencias:
  • Cuando obtemos un error estaría bien saber cual es el error.
  • Otra cosa que ayuda mucho es generar el ZIP con el pequeño proyecto y subirlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 25-04-2018
vicens22 vicens22 is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 61
Poder: 14
vicens22 Va por buen camino
Muchas gracias a ambos por vuestras respuestas.

Creo que tengo algunas pistas para realizar algunas pruebas e intentar solventarlo.

Tienes toda la razón Neftali en los dos puntos que comentas.
Sin embargo, en el primer punto, el error no lo cite porque creo que no ayuda mucho:

Access violation ad address 013CB776 in module 'xxxxx.exe'.

Y la aplicación se cierra.

Voy a intentar solventarlo y con el resultado que obtenga lo comento de nuevo.
Si no consigo resolverlo, o me quedo con dudas, haré lo que propones, crearé un ejemplo simple y subiré el código.

Muchas gracias de nuevo.
Un saludo.
Responder Con Cita
  #5  
Antiguo 25-04-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por vicens22 Ver Mensaje
Sin embargo, en el primer punto, el error no lo cite porque creo que no ayuda mucho:

Access violation ad address 013CB776 in module 'xxxxx.exe'.

Y la aplicación se cierra.
Aunque parezca que no, algo sí ayuda.
Access Violation significa que has intentado acceder a un objeto que no está creado o que ha sido liberado.

Por lo que comentas antes Form1 era el formulario principal y ahora ya no lo es. El formulario principal (por serlo) se crea de forma automática al arrancar el proyecto. Si ahora ya no lo es, es posible que si no has cambiado nada de código, el Form1 que antes estaba creado, ahora ya no lo esté.
Si es así, debes crearlo antes de usarlo.

De todas formas este error debería ser fácil de encontrar si haces debug del programa paso a paso.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Manipular objetos desde otro objeto en otro form Nicolas_2011 Delphi para la web 8 17-11-2012 19:12:51
Actualizar un lookupcombobox desde otro formulario analia1979 OOP 5 30-03-2011 18:12:30
Cómo ejecutar un método de un formulario desde otro alba13 OOP 16 11-10-2007 13:34:26
refrescar un datagrid desde otro formulario en vb.net Mayorlin .NET 8 01-08-2007 21:02:20
Pasar datos desde otro formulario taita Varios 5 05-10-2004 00:48:45


La franja horaria es GMT +2. Ahora son las 01:09:16.


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