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.