Ver Mensaje Individual
  #10  
Antiguo 14-04-2011
Diana Carolina Diana Carolina is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 30
Reputación: 0
Diana Carolina Va por buen camino
Hola

Hice las siguientes pruebas y anexo los resultados.

Deje esta parte igual.

Código Delphi [-]
procedure TFrmMenuCliente.ClientesClick(Sender: TObject);
begin
  Try
    if Application.FindComponent('FrmClientes') = nil then
       FrmClientes := TFrmClientes.Create(Owner);
    Permisos(FrmClientes.Tag);
    PermisosBotones(FrmClientes.spbAdicionar,FrmClientes.spbModificar,nil,FrmClientes.spbAceptar);
    FrmClientes.ShowModal;
  finally
    FrmClientes.Free;
  end;
end;

Cambie esta parte. Comentarie el Action := caFree.

Código Delphi [-]
procedure TFrmClientes.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
//spbcancelar.OnClick(nil);

  QryConsulta.Close;
  //desactivas las consultas que utilizan las vistas
  QryLmTipCl.Close;
  QryLmFinan.Close;
  QryLmSectorDian.Close;
  QryLmAecon.Close;
  QryGnDivip.Close;
  QryLmRegim.Close;
  QryLmTipCu.Close;
  QryOmEmiso.Close;
  QryLmPjRep.Close;
  QrySegmClie1.Close;
  QrySegmClie2.Close;
  QrySegmClie3.Close;
  QrySegmCanal1.Close;
  QrySegmCanal2.Close;
  QrySegmCanal3.Close;
  //consultas que se utilizan en los combos
  QryLmTipIden.Close;

//  Action := caFree; //Linea Comentariada para la prueba. 
end;

Resultado : Access Violation.

Prueba 2

Comentarié el Try

Código Delphi [-]
procedure TFrmMenuCliente.ClientesClick(Sender: TObject);
begin
//  Try
    if Application.FindComponent('FrmClientes') = nil then
       FrmClientes := TFrmClientes.Create(Owner);
    Permisos(FrmClientes.Tag);
    PermisosBotones(FrmClientes.spbAdicionar,FrmClientes.spbModificar,nil,FrmClientes.spbAceptar);
    FrmClientes.Show;
//  finally
//    FrmClientes.Free;
//  end;
end;

Esta parte la deje en su version original.

Código Delphi [-]
procedure TFrmClientes.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
//spbcancelar.OnClick(nil);

  QryConsulta.Close;
  //desactivas las consultas que utilizan las vistas
  QryLmTipCl.Close;
  QryLmFinan.Close;
  QryLmSectorDian.Close;
  QryLmAecon.Close;
  QryGnDivip.Close;
  QryLmRegim.Close;
  QryLmTipCu.Close;
  QryOmEmiso.Close;
  QryLmPjRep.Close;
  QrySegmClie1.Close;
  QrySegmClie2.Close;
  QrySegmClie3.Close;
  QrySegmCanal1.Close;
  QrySegmCanal2.Close;
  QrySegmCanal3.Close;
  //consultas que se utilizan en los combos
  QryLmTipIden.Close;

  Action := caFree;
end;

Resultado : Access Violation

Prueba 3

Código Delphi [-]
procedure TFrmMenuCliente.ClientesClick(Sender: TObject);
begin
  Try
    if Application.FindComponent('FrmClientes') = nil then
       FrmClientes := TFrmClientes.Create(Owner);
    Permisos(FrmClientes.Tag);
    PermisosBotones(FrmClientes.spbAdicionar,FrmClientes.spbModificar,nil,FrmClientes.spbAceptar);
    FrmClientes.ShowModal;
  finally
    FrmClientes.Close; //Cambie el Free por Close.
  end;
end;

Quite el caFree.

Código Delphi [-]
procedure TFrmClientes.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
//spbcancelar.OnClick(nil);

  QryConsulta.Close;
  //desactivas las consultas que utilizan las vistas
  QryLmTipCl.Close;
  QryLmFinan.Close;
  QryLmSectorDian.Close;
  QryLmAecon.Close;
  QryGnDivip.Close;
  QryLmRegim.Close;
  QryLmTipCu.Close;
  QryOmEmiso.Close;
  QryLmPjRep.Close;
  QrySegmClie1.Close;
  QrySegmClie2.Close;
  QrySegmClie3.Close;
  QrySegmCanal1.Close;
  QrySegmCanal2.Close;
  QrySegmCanal3.Close;
  //consultas que se utilizan en los combos
  QryLmTipIden.Close;

//  Action := caFree; //Quite el caFree
end;

Resultado : Al cerrar FrmClientes no me sale Access Violation, pero si vuelvo y lo abro e intento registrar otro cliente me sale el error QryConsulta: Cannot perform this operation on a closed dataset. Cuando cierro el formulario principal FrmMenuCliente, me dice que provoco un error y debe cerrarse y despues me despliega el Access Violation. Osea que se cambia el error de un formulario a otro. y el problema es que no me deja crear o editar un nuevo cliente.

Prueba 4

Agregue Close despues del Free

Código Delphi [-]
procedure TFrmMenuCliente.ClientesClick(Sender: TObject);
begin
  Try
    if Application.FindComponent('FrmClientes') = nil then
       FrmClientes := TFrmClientes.Create(Owner);
    Permisos(FrmClientes.Tag);
    PermisosBotones(FrmClientes.spbAdicionar,FrmClientes.spbModificar,nil,FrmClientes.spbAceptar);
    FrmClientes.ShowModal;
  finally
    FrmClientes.Free;
    FrmClientes.Close; //Agregué esta linea. 
  end;
end;

Quite el caFree

Código Delphi [-]
procedure TFrmClientes.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
//spbcancelar.OnClick(nil);

  QryConsulta.Close;
  //desactivas las consultas que utilizan las vistas
  QryLmTipCl.Close;
  QryLmFinan.Close;
  QryLmSectorDian.Close;
  QryLmAecon.Close;
  QryGnDivip.Close;
  QryLmRegim.Close;
  QryLmTipCu.Close;
  QryOmEmiso.Close;
  QryLmPjRep.Close;
  QrySegmClie1.Close;
  QrySegmClie2.Close;
  QrySegmClie3.Close;
  QrySegmCanal1.Close;
  QrySegmCanal2.Close;
  QrySegmCanal3.Close;
  //consultas que se utilizan en los combos
  QryLmTipIden.Close;

//  Action := caFree; //Quite esta Linea
end;

Resultado : Access Violation.

Bueno parece que es mas complicado de lo que parece.

Ahi les dejo las 4 pruebas que realice sin exito.

Quedo atenta a sus comentarios.

Gracias.
Responder Con Cita