Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-01-2010
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
error con form de acceso al sistema

Hola amigos ...tengo el siguiente problema

tengo un form para acceder al sistema ....
Código Delphi [-]
Application.Initialize;
  Application.MainFormOnTaskbar := True;
      Application.CreateForm(TDataAreas, DataAreas);


  frmLogin:=TFrmLogin.Create(Nil);
  if FrmLogin.ShowModal=mrYes then
   begin


   Application.CreateForm(TFrmPrincipal, FrmPrincipal);
..
..
..
..
.. // el resto de los formularios 
  Application.Run;

  end;

si ejecuto dicho codigo y no me logeo (modalresult distinto a mrok )sea por cerrar el form con el boton de cerrar me da el siguiente error .....

access violation on address xxxx in module xxxx Read of address xxxxx

si coloco la siguiente linea
Código Delphi [-]
Application.CreateForm(TDataAreas, DataAreas);
dentro del
if FrmLogin.ShowModal=mrYes then todo funciona bien... sin embargo quiero llamar antes del form de acceso a dicho form DataAreas porque el el modulo de datos y lo necesito activo para consultar el usuario....

espero que me puedan ayudar ....

Gracias ....
Responder Con Cita
  #2  
Antiguo 20-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
una preguntita... ¿Quién destruye a frmLogin?

Lo que haces es mas que habitual, solo que se hace muy difícil de leer por la identación que has usado, y sinceramente se me ha complicado mucho entenderte. El error no está en el código que estas mostrando, pero tienes que tener claras un par de premisas, si el formulario de login, va a acceder a datos mediante "DataAreas", es evidente que este debe ser creado previamente a que uses su referencia.
Para encontrar el error prueba liberar todo "a mano" para identificar que objeto falla al ser destruído.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 20-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

A simple vista, creo que el error te da es por que ¿que pasa si la funcion
FrmLogin.ShowModal devuelve otro valor distinto a mrYes?,
es decir el usuario presiona(Supongo)otro boton, por ejemplo el
boton cancelar..(OJO Viendo tu codigo eso implica que los otros
formularios no se estan creando o instanciando).
Creo que en ese caso deberias tener un else para finalizar(supongo)
la aplicacion..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #4  
Antiguo 20-01-2010
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Hola

Ahora si funciono
Código Delphi [-]
program SisAreas;

uses
  Forms, Controls,
  F_Principal in 'Principal\F_Principal.pas' {FrmPrincipal},
  F_DataAreas in 'DatosAreas\F_DataAreas.pas' {DataAreas: TDataModule},
 ..
..
..
..
..
..
..
{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TDataAreas, DataAreas);
  frmLogin:=TFrmLogin.Create(Nil);
  if FrmLogin.ShowModal=mrYes then
   begin
    Application.CreateForm(TFrmPrincipal, FrmPrincipal);
    Application.CreateForm(TFrmMobiliario, FrmMobiliario);
    Application.CreateForm(TFrmAreas, FrmAreas);
    Application.CreateForm(TFrmAsignaturas, FrmAsignaturas);
    Application.CreateForm(TFrmMotivos, FrmMotivos);
    Application.CreateForm(TFrmUsuarios, FrmUsuarios);
    Application.CreateForm(TFrmAsignarAreas, FrmAsignarAreas);
    Application.CreateForm(TFrmCalendario, FrmCalendario);
    Application.CreateForm(TPlantilla, Plantilla);
    Application.CreateForm(TFrmBuscador, FrmBuscador);
    Application.CreateForm(TFrmSolicitudArea, FrmSolicitudArea);
    Application.CreateForm(TFrmSolicitudAreaStatus, FrmSolicitudAreaStatus);
    Application.Run;
  end
  else  DataAreas.Destroy;
end.

sin duda el DataModulo llamado DataAreas debe ser destruido explicitamente porque incluso intente en la penultima linea

Código Delphi [-]
 else  application.terminate;

y no funciona para nada pero con Destroy si que si


Gracias a todos ....

P.D: ya lo idente mejor, perdon por el desorden anterior ....
Responder Con Cita
  #5  
Antiguo 20-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow Un consejo

En todo caso, lo mas estandar y recomendable para destruir un objeto y liberar memoria en Delphi es usando el metodo Free,este metodo llama internamente al destructor (Destroy) del objeto;ya que si llamamos el destructor directamente, en algunos casos(no siempre) podria ocurrir una Excepcion si nuestro objeto ya fue liberado anteriormente o no fue instanciado(no se reservo memoria),etc,por eso es recomendable destruir un objeto con Free, evitando tales situaciones.

Siguiendo tu codigo seria asi:
Código Delphi [-]
...
else DataAreas.Free;//<<----
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 20-01-2010 a las 20:34:58.
Responder Con Cita
  #6  
Antiguo 20-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por Kenobi Ver Mensaje
sin duda el DataModulo llamado DataAreas debe ser destruido explicitamente porque incluso intente en la penultima linea
Si lo creas como lo hiciste en el código, no tendrías que encargarte de destruírlo, ya que al utilizar Application.CreateForm el DataModule tiene como Owner el objeto Application, y cuando se destruye Application (al ejecutar el finalization de la unit Forms) destruiría el DataModule.
Recuerda que en tu código frmLogin queda en memoria hasta que se termine el proceso por completo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 21-01-2010
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.235
Poder: 20
ElKurgan Va camino a la fama
Sin embargo, a mi me ha pasado como a Kenobi. Si no libero el data module me lanza la excepción. No se si tendrá que ver con que se cree antes el modulo de datos (para acceso a la cuenta de usuarios) que el formulario principal, que trata el ciclo de mensajes de windows, o se trata de un bug de Delphi. Programo con Delphi 2005, y lo solucioné como dice Kenobi, con un "else" y un DataModule.Free.

Saludos
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
acceso a sistema andreita PHP 10 25-04-2008 15:09:33
Corelab ...Formulario de Acceso al sistema ... Kenobi Varios 2 20-04-2007 23:47:57
Como validar Acceso al sistema alcides OOP 14 04-12-2004 03:26:44
Acceso a método d 1 form dsd Módulo d Datos Muten Varios 2 25-11-2003 13:50:57
Error De Sistema omarys Varios 8 04-09-2003 19:04:26


La franja horaria es GMT +2. Ahora son las 11:10:27.


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