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
QryConsulta.Close;
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;
QryLmTipIden.Close;
end;
Resultado : Access Violation.
Prueba 2
Comentarié el Try
Código Delphi
[-]procedure TFrmMenuCliente.ClientesClick(Sender: TObject);
begin
if Application.FindComponent('FrmClientes') = nil then
FrmClientes := TFrmClientes.Create(Owner);
Permisos(FrmClientes.Tag);
PermisosBotones(FrmClientes.spbAdicionar,FrmClientes.spbModificar,nil,FrmClientes.spbAceptar);
FrmClientes.Show;
end;
Esta parte la deje en su version original.
Código Delphi
[-]procedure TFrmClientes.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
QryConsulta.Close;
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;
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; end;
end;
Quite el caFree.
Código Delphi
[-]procedure TFrmClientes.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
QryConsulta.Close;
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;
QryLmTipIden.Close;
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; end;
end;
Quite el caFree
Código Delphi
[-]procedure TFrmClientes.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
QryConsulta.Close;
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;
QryLmTipIden.Close;
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.