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 19-02-2020
LACV LACV is offline
Miembro
 
Registrado: oct 2015
Posts: 80
Poder: 9
LACV Va por buen camino
Exclamation probelas al usar un mismo formulario para abrirlo en dos mas

buena tarde si es posible que me ayudes con un error que tengo ; es que estoy usando un formulario frmproductolist lo abro este formulario se abre desde dos formularios distinto uno es frmsalida y el otro frmentrada desde cualquiera de los dos llamo y abro frmproductoslist con este código

Código Delphi [-]
try
    FrmProductoList := TFrmProductoList.Create(application);
    DModulo.reset_producto;
    FrmProductoList.ShowModal;
  finally
    FrmProductoList.Free;
end;


si se abre desde frmentrada y se realiza el procedimiento coloca los datos en EdtProducto.Text de frmentrada y luego voy a frmsalida y mando a cargar los datos enEdtProducto.Text de frmsalida y me lanza un error;

acces violation at addres 00572eddv modulo . read of addres 20202056

para cargar los datos a los formularios lo hago a si desde frmproductolist

Código Delphi [-]

if Assigned(FrmOrdenEntradaCrud) then
  begin

    ShowMessage('entrada');
    Application.ProcessMessages;
    with FrmOrdenEntradaCrud do
    begin
      cantidad := StrToInt(DModulo.UQuery_Producto.FieldByName('N_existencia')
        .AsString);
      if MessageDlg('Ha seleccionado el producto.' + #13#10 +
        DModulo.UQuery_Producto.FieldByName('Producto').AsString + '',
        mtConfirmation, mbYesNo, 0) = mrYes then
      begin
        // cargamos los datos en el formulario

        EdtProducto.Text := DModulo.UQuery_Producto.FieldByName('Producto')
          .AsString + ' ' + DModulo.UQuery_Producto.FieldByName
          ('Referencia').AsString;

      end
      else
      begin
        ShowMessage('El Producto Seleccionado no Tiene 0 de Existencia');
      end;
    end;

  end;

  if Assigned(FrmSalidaCrud) then
  begin

    ShowMessage('salida');
    Application.ProcessMessages;

    with FrmSalidaCrud do
    begin
      cantidad := StrToInt(DModulo.UQuery_Producto.FieldByName('N_existencia')
        .AsString);
      if cantidad > 0 then
      begin
        // cargamos los datos en el formulario

        EdtProducto.Text := DModulo.UQuery_Producto.FieldByName('Producto')
          .AsString + ' ' + DModulo.UQuery_Producto.FieldByName
          ('Referencia').AsString;

      end
      else
      begin
        ShowMessage('El Producto Seleccionado no Tiene 0 de Existencia');
      end;
    end;

  end;

  // cerramos el formulario
  FrmProductoList.Action.Free;
  FrmProductoList.Close;


aaa y en el evento onclose de frmproductolist estoy agregando este codigo

Código Delphi [-]
Action := caFree;
que error estoy cometiendo; les agradezco de antemano
Responder Con Cita
  #2  
Antiguo 19-02-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, lo que sucede es que estás liberando el objeto, al intentar acceder nuevamente, se genera el error.

Código Delphi [-]
  Action := caFree; //Esto libera el objeto del formulario al cerrarse

Puedes o crear y liberar el objeto en cada uso

Código Delphi [-]
  FormularioModal := TFormularioModal.Create(Application);
  try
    FormularioModal .ShowModal;
  finally
    FormularioModal.Free;
  end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 20-02-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Si necesitas acceder a un formulario no puedes cerrarlo (caFree) sino que tienes que ocultarlo (caHide), trabajar con él, mostrarlo cuando lo necesites y cerrarlo definitivamente cuando termines de usarlo.
Responder Con Cita
  #4  
Antiguo 20-02-2020
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.286
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
Código Delphi [-]
...
try
    FrmProductoList := TFrmProductoList.Create(application);
    DModulo.reset_producto;
    FrmProductoList.ShowModal;
  finally
    FrmProductoList.Free;      (1)
end;
...

  FrmProductoList.Action.Free;   (2)

...

Action := caFree;     (3)

Lo primero que yo haría es ejecutar paso paso la aplicación poner algun breakpoint en esos lugares y ver si "salta" el error. Así sabrás seguro la línea donde falla.

Por lo otro lado comentar estas tres líneas que he marcardo porque son las que pienso que te pueden dar problemas.
(1) Liberas el formulario manualmente con Free. Bien hasta ahí, el problema es que en la (3) utilizar caFree que indica al propietario que haga lo mismo. Por lo tanto estarás intentando liberar el formulario 2 veces. Eso es candidato a un error de "Access Violation".
En este caso en la línea (3) puedes usar un caNone o caFree.

(2) Estás liberando algo que aquí no vemos dónde se crea. Si es algo que has creado tú, bien, si no lo has creado tú de forma expresa, es posible que esté pasando lo mismo que antes; que se esté intentando liberar 2 veces. Por lo tanto si es así vuelve a ser candidato a un "Access violation".
__________________
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
3 botones para acceder a un mismo formulario. VRO Varios 9 05-09-2007 02:08:32
Se puede convertir el formato de quickreport para abrirlo con excel??Gracias yomismo Impresión 8 15-08-2007 23:12:36
Probelas de conexion con interbase desde php didocol Firebird e Interbase 1 01-06-2007 19:58:57
Usar un solo procedimiento almacendado para restar o sumar valores a un mismo registro Chogo Trucos 2 11-05-2007 17:39:01
Quiero liberar my query para usar el mismo varias veces zcatzz Conexión con bases de datos 7 27-01-2007 23:39:45


La franja horaria es GMT +2. Ahora son las 18:33:28.


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