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 29-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
Pasar datos de un form a otro

Hola amigos, soy bastante novato en delphi y me encuentro con un problmilla que me trae de cabeza a ver si alguien puede arrojarme un poco de luz:
En una aplicacion desde el form principal abro uno en modo modal con varios edits, desde este form abro otro tambien en modal donde tengo un dbgrid con los resultados de un query lo que quiero es que los datos vuelvan al segundo formulario pero me da error, pienso que debe ser alguna propiedad del form ya que si inserto un edit en el formulario de busqueda captura bien los datos
codigo delphi:
en form 3 tengo esto
begin
form2.edit2.text:=adoquery.fieldbyname('cliente').asstring;
end;
sin embargo si el edit esta en el mismo form funciona correcto
codigo delphi:
begin
edit2.text:=adoquery.fieldbyname('cliente').asstring;
end;
alguien que pueda hecharme un cable y que no sea al cuello

gracias
Responder Con Cita
  #2  
Antiguo 29-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
mas datos

Hola otra vez referente a la pregunta que he hecho deciros que tengo las referencias a las unidades en uses y que tambien he intentado usando variables globales tanto en un form como en el otro y siempre me da error de violacion de acceso a memoria por si puede servir de algo
Responder Con Cita
  #3  
Antiguo 29-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, bienvenido al ClubDelphi. Te recomiendo que leas la guía de estilo. También te sugiero que uses las etiquetas adecuadas para poner código. Las etiquetas [code] o [delphi] te permite formatear en automático tu código.

// Saludos
Responder Con Cita
  #4  
Antiguo 29-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

Cita:
lo que quiero es que los datos vuelvan al segundo formulario pero me da error
A la hora de ayudar tambien nos es muy útil que transcribas exáctamente el mensaje de error que te está dando. A golpe de ojo pareciera que te falto incluir la unidad de Form2 en Form3.

Form3:
Código Delphi [-]
...
implementation

uses Unidad_de_Form2;

procedure TForm3...
begin
  Form2.edit2.text := adoquery.fieldbyname('cliente').asstring;
  ...
end;
...
Pero sin saber exáctamente el error que te arroja no puedo aventurar mas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 29-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
pasar datos de un form a otro

Hola eficsa gracias por responder te pongo el codigo del form 2 y del form5

Código Delphi
en form 2
Código Delphi [-]
implementation
USES
UNIT4, UNIT5;
en form 5:
Código Delphi [-]
implementation
uses
unit2;
 
procedure tform5.datos(sender: TObject);
begin
form2.Edit2.Text:=adoquery1.fieldbyname('perro').Asstring;
end;

el procedimiento datos es llamado por el evento ondblclick de un bdgrid del form5
y el error que da es el siguiente access violation at adress 004bebf9 in module proyect.exe. read of address 0000036c.

a ver si te sirve esta informacion.
pd si pongo la etiqueta para remarcar el codigo dice que no se me permite poner imagenes tendre cara de malo?

Última edición por ecfisa fecha: 29-08-2012 a las 22:38:40. Razón: Agregar etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #6  
Antiguo 29-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

¿ Y Form2 ya fué creado cuando lo invocas en Form5 ?

Para salir de dudas, proba si de este modo desaparece el error:
Código Delphi [-]
implementation
uses
  unit2;
 
procedure tform5.datos(sender: TObject);
begin
   if Assigned(Form2) then
     form2.Edit2.Text:=adoquery1.fieldbyname('perro').Asstring;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 29-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
Gracias por tu ayuda ecfisa te comento:
La solucion que me has posteado si bien no da error tampoco produce cambios la mas raro es que el form2 es el que abre el form5 mediante un boton primero los abria en modal pero lo he cambiado por si era eso lo que producia el error el form 2 queda abierto mientras el form5 se ejecuta.

Muchas gracias por la ayuda compañero
Responder Con Cita
  #8  
Antiguo 30-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

Cita:
La solucion que me has posteado si bien no da error tampoco produce cambios
En realidad no era una solución sino mas bién una prueba para identificar el problema.

Ahora intentalo de este modo:
Código Delphi [-]
implementation
uses
  unit2;
 
procedure tform5.datos(sender: TObject);
begin
  if not Assigned(Form2) then
    with TForm2.Create(nil) do
    try
      edit1.Text := adoquery1.fieldbyname('perro').Asstring;
      ShowModal;
    finally
      Free;
    end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 30-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
muchos errores y una luz

Hola de nuevo sobre todo agradecerte ecfisa tu ayuda porque empieza a darme un poco de luz

Código Delphi [-]
implementation
uses  unit2; 
procedure tform5.datos(sender: TObject);
begin  
  if not Assigned(Form2) then    
    with TForm2.Create(nil) do    
    try      
      edit1.Text := adoquery1.fieldbyname('perro').Asstring;      
      ShowModal;    
    finally      
      Free;    
    end;
end;

esto hace que me de un error al no encontrar el field del query aun haciendo referencia al form donde se encuentra asi que despues de muchas pruebas y mas errores he llegado a una conclusion ( casi seguro erronea dadas mis limitaciones) el problema me parece que viene porque al ser formulrios modales tienen el control de la aplicacion y no permiten manipular otro formulario por error llegue a una solucion que seguramente no sera todo lo limpia que debia, la voy a explicar por si alguno quiere corregirla o si le sirve de utilidad a alguien.

la solucion es usar otro form o un modulo que haga de puente en mi caso utilizare form4 que es el main de la aplicacion en el declaro una variable global y le asigno el valor en el procedimiento del form5

Código Delphi [-]
procedure tform5.datos(sender: TObject);
begin
  form4.perro:=adoquery1.FieldByName('perro').AsString);
  self.close
end;

despues doy la orden de cerrar el formulario y en la parte donde cree el form5

Código Delphi [-]
procedure TForm2.BitBtn1Click(Sender: TObject);
var
  varforms:tform5;
begin
  varforms:=tFORM5.Create(self);
  try
    varforms.Showmodal;
  finally
    Edit2.Text:=form4.perro;
    varforms.Free;
  end;

Aqui pasamos el valor de la variable puente al form 2 esto funciona perfectamente.
Si alguien se le ocurre como mejorar lo agradecere la ayuda asi como cualquier consejo que me haga aprender.

Última edición por Casimiro Notevi fecha: 30-08-2012 a las 16:47:52.
Responder Con Cita
  #10  
Antiguo 30-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

En realidad no entiendo bién el problema por que si asignas el valor a Form2.Edit1 antes de mostrarlo modalmente, cuando llames al método ShowModal tiene que aparecer el valor en Form2.Edit1 (debo aclarar que por tu código pensé que el query estaba en Form5 y no en otro).

Pero de todos modos me parece conveniente poner tus querys, datasets, etc. en un TDataModule accesible a las unidades que lo precisen.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 30-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
Efectivamente ecfisa el query esta en el form5 quizas no me explique bien mi aplicacion tiene el form4 que es el main desde el cual abro el form2 en modal y desde el form2 abro el form5 en modal tambien el form2 no se cierra sigue abierto latente hasta que el form5 finalice quizas por eso no me deja manipularlo si se os ocurre cualquier otra solucion estare encantado de aprenderla
Responder Con Cita
  #12  
Antiguo 30-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

Creo no entender el problema que se te produce utilizando el código que te puse en el mensaje #8.
Para que nos entendamos mejor te adjunto un pequeño ejemplo con dos forms. En Form5 un ADOQuery conectado a la tabla country de dbdemos.mdb (viene con Delphi), al pulsar un botón ejecuta un código básicamente igual al que te puse y muestra los campos del registro actualmente seleccionado en 5 edits residentes en Form2, que previamente fué quitado de Auto-create forms.

Espero te sirva de guía o para que puedas decirme que es lo que no estoy entendiendo de tu problema.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-09-2012 a las 01:00:27.
Responder Con Cita
  #13  
Antiguo 31-08-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
Hola de nuevo ecfisa muchas gracias por tu ayuda, el ejemplo tuyo no puedo descargarlo segun el servidor no tengo permisos suficientes aunque este logueado voy a intentar explicarme mejor ruego disculpes si no he sabido hacerme entender.
Mi aplicacion lanza un formulario form4 que es el principal desde ahi con un bitbnt abro el form2 con edits para rellenar mediante el siguiente codigo

Código Delphi [-]
 
procedure TForm4.BitBtn1Click(Sender: TObject);
var
  varform:tform2;
begin
  varform:=tFORM2.Create(form4);
  try
    varform.Showmodal;
  finally
    varform.Free;
  end;


Desde el form2 con otro bitbtn abro el form5 en modal tambien con este codigo
Código Delphi [-]
procedure TForm2.BitBtn1Click(Sender: TObject);
var
  varforms:tform5;
begin
  varforms:=tFORM5.Create(self);
  try
    varforms.Showmodal;
    // aqui creo que es donde falla quizas deberia quitar la propiedad modal al form2 pero no se como
  finally
    varforms.Free;
  end;

En el form5 tengo un bdgrid y ejecuto un query al que asocion el codigo para que rellene los edits del form2.

Si pongo el codigo que me mandaste
Código Delphi [-]
  if not Assigned(Form2) then
    with TForm2.Create(nil) do
    try
      form2.edit2.Text :=form5.adoquery1.fieldbyname('perro').Asstring;
      ShowModal;
    finally
      Free;
    end;


Sigue dando el mismo error access violation at address 004bfd43 in module projrct.exe. read of address 00000370.
Espero haber explicado bien el escenario y los errores que produce gracias otra vez por tu esfuerzo.

Última edición por ecfisa fecha: 31-08-2012 a las 16:44:21. Razón: corregir etiquetas (problema de interfaz mejorada)
Responder Con Cita
  #14  
Antiguo 31-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

No sé por que no te permite descargar el archivo, estuve revisando tus permisos y no pareciera haber ningún problema. Luego miraremos con más detalle.

Te pongo el ejemplo ya que no es muy complicado (no creo que te lleve mas de 5 minutos hacerlo). Consiste en un form principal (Form4) que tiene 5 componentes:
  • 1 ADOConnection1.ConnectionString -> dbdemos.mdb
  • 1 ADOQuery1.Connection -> ADOConnection1
  • 1 DataSource1.DataSet -> ADOQuery1
  • 1 DBGrid1.DataSource -> DataSource1
  • 1 BitBtn1
Creas otro form (Form2) agregale 5 Edits, y lo sacas de Projects -> Options -> Forms -> Auto-create forms.

Luego el código en Form4:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DB, ADODB, Grids, DBGrids;

type
  TForm4 = class(TForm)
    BitBtn1: TBitBtn;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure BitBtn1Click(Sender: TObject);
  private
  public
  end;

var
  Form4: TForm4;

implementation {$R *.dfm}

uses Unit2; // Form2

procedure TForm4.BitBtn1Click(Sender: TObject);
begin
  with TForm2.Create(nil) do
  try
    // Las asignaciones antes de ShowModal
    Edit1.Text := ADOQuery1.FieldByName('NAME').AsString;
    Edit2.Text := ADOQuery1.FieldByName('CAPITAL').AsString;
    Edit3.Text := ADOQuery1.FieldByName('CONTINENT').AsString;
    Edit4.Text := ADOQuery1.FieldByName('AREA').AsString;
    Edit5.Text := ADOQuery1.FieldByName('POPULATION').AsString;
    ShowModal;
  finally
    Free;
  end;
end;
end.
Veras que muestra los campos en los edits de Form2 del registro actualmente seleccionado desde el DBGRid sin problemas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 02-09-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
Gracias por tu ayuda una vez mas ecfisa tu ejemplo funciona perfectamente pero tu ejemplo y el mio tienen una diferencia:
En tu ejemplo tu asignas los valores a los edits despues de crear el form2 y antes de mostrarlo en el mio el form2 ya esta creado y mostrado en modal puesto que contiene ya valores que proceden del form4 no puedo cerrarlo creo que ahi radica el problema del error que al ser un formulario modal y ya estar creado y mostrado no permite que otro form lo manipule.
La verdad que es mas una curiosidad y una solucion para el futuro ya que con la solucion que postee antes funciona seguire investigando y si encuentro otra solucion.
Un saludo
Responder Con Cita
  #16  
Antiguo 02-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola astrosnik.

Cita:
en el mio el form2 ya esta creado y mostrado en modal
De ese modo no veo factible la asignación, ya que al mostrar a Form2 de forma modal, este no devuelve el control hasta que se cierre. Por lo que, las líneas de asignación posteriores al método ShowModal, no serán ejecutadas hasta despues de que Form2 devuelva el control.

Saludos.

Rectifico, debí decir: De ese modo no veo factible la visualización de los datos asignados.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-09-2012 a las 02:45:04.
Responder Con Cita
  #17  
Antiguo 03-09-2012
astrosnik astrosnik is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 9
Poder: 0
astrosnik Va por buen camino
mil gracias

Hola efcisa:
Muchas gracias por tus aclaraciones y indicaciones asi como los ejemplos mostrados que me seran de mucha utilidad resueltas mis dudas sobre formularios modales y habiendo encontrado una solucion para mi problema por mi parte doy por cerrado el tema.
Un saludo
Responder Con Cita
  #18  
Antiguo 06-03-2017
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 18
destrukthor Va por buen camino
Smile Violacion de Acceso

Gracias a todos en el foro, sus ejemplos resolvieron un problema que tenia desde un modulo de datos para abrir formularios de conexión de instancias de bases de datos.

Un gran aporte estimados y una importante ayuda a los que nos gusta la programación, pero no tenemos mucho tiempo para ello.

Saludos...
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar dato variable de un form a otro.. yevabas Varios 5 26-04-2011 21:45:48
pasar datos de un form a otro form vroa74 API de Windows 15 12-10-2007 20:11:52
pasar valores de variables de un form a otro oscarpinog Varios 7 12-08-2007 04:18:39
Error al pasar datos de un form a otro jcfonsecar Varios 6 12-07-2006 03:22:22
Pasar información de un form a otro davidgaldo Varios 3 10-02-2004 20:00:34


La franja horaria es GMT +2. Ahora son las 16:20:59.


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