Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema de Access Violation en Delphi XE2 (https://www.clubdelphi.com/foros/showthread.php?t=86916)

jose.ignacio.ve 23-10-2014 03:45:37

Problema de Access Violation en Delphi XE2
 
hola tengo un problema. tengo un sistema de Gestion de alumnos. la primera pantalla que se tiene que mostrar es la de inicio de sesion. tengo este codigo
Código Delphi [-]
program P_rujas;

uses
  Vcl.Forms,
  controls,
  Uprincipal in 'Uprincipal.pas' {fprincipal},
  Umod in 'Umod.pas' {fmodulo: TDataModule},
  Ualumnos in 'Ualumnos.pas' {FAlumnos},
  Ulistado_alumnos in 'Ulistado_alumnos.pas' {flistado_alumnos},
  Ureportes in 'Ureportes.pas' {freportes: TDataModule},
  Ulistado_usuarios in 'Ulistado_usuarios.pas' {flistado_usuarios},
  Uusuarios in 'Uusuarios.pas' {fusuarios},
  Ulogin in 'Ulogin.pas' {Flogin},
  Uclave in 'Uclave.pas' {fclave},
  Uprincipal1 in 'Uprincipal1.pas' {Fprincipal1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TFprincipal1, Fprincipal1);
  if flogin.ModalResult = mrcancel  then
       Application.Terminate  ;



     Application.Run;


end.
los otros formularios tengo los creo a la hora de llamarlo. me da error con ese codigo. Cuando lo los creaba automaticamente no me daba error. en tiempo de ejecucion. Pero si el sistema esta abierto mas de un dia me un error que no se de que es.

nlsgarcia 23-10-2014 05:20:19

jose.ignacio.ve,

Cita:

...la primera pantalla que se tiene que mostrar es la de inicio de sesión...
:rolleyes:

Revisa esta información, específicamente el Msg #9
Espero sea útil :)

Nelson.

jose.ignacio.ve 23-10-2014 06:10:47

gracias ya solucione eso. Estaba creando mal los formularios. pero ahora tengo un problema. al cerrar sesion necesito que me aparezca de nuevo la pantalla de inicio de sesion
y se cierre la pantalla principal.
Código Delphi [-]
Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(Tfmodulo, fmodulo);
  Application.CreateForm(Tfprincipal, fprincipal);
  fprincipal1:=tfprincipal1.Create(nil);
  Fprincipal1.ShowModal;
  if Fprincipal1.ModalResult= mryes then
      begin
         Application.Run        ;
         Fprincipal1.Close;
         Fprincipal1.Free;

      end;
fprincipal1 es solo la pantalla de logeo, donde si la contraseña y el usuario son correctos me ejecuta la aplicacion. y m muestra la pantalla principal del sistema donde tiene un menu y dos botones
un es para cerrar sesion donde me deshabilita el menu y se me habilita un boton de inicio de sesion. Hasta ahi voy bien. Ahora yo quiero que al hacer clic en el boton de inicio de sesion me aparezca de nuevo la pantalla de logeo pero que a su ves se me cierre la ventana principal del sistema. Osea que vuelva como a comenzar desde un principio.

AgustinOrtu 23-10-2014 06:45:52

Que tal, te comento como lo trabajo yo:

Al iniciar la aplicacion, se crea el modulo de datos y el form de logeo tal como lo tenes vos

El usuario ingresa usuario y contraseña, si son correctos, hago algo como esto
Código Delphi [-]
...
Application.CreateForm(TFPrincipal, FPrincipal);
FLogin.Hide; // Nunca cierro este form, a menos que quiera cerrar la aplicacion
FPrincipal.ShowModal;
FPrincipal.Free;
...

Luego el boton de cerrar sesion:

Código Delphi [-]
FPrincipal.Close;
FLogin.Show;

Y si quiero cerrar la aplicacion lo que hago es:

Código Delphi [-]
FLogin.Close;

Evidentemente en la configuracion del proyecto el FLogin es el que esta declarado como "Main-Form"

Saludos!

jose.ignacio.ve 23-10-2014 14:10:50

muchas gracias me ayudo mucho. ahora me podes sacar unas dudas? que hace el free? el hide y el close. cual es la diferencia. si bien lei muchos post pero no m saco la duda todavia. a que se refiere con destruir el formulario a liberar memoria? y cual es el mejor momento de liberar memoria? y que formularios los pongo en hide o close?

Caminante 23-10-2014 16:59:04

Hola

Lo ideal seria que el formulario principal no sea el de login. Lo que debes hacer es crear el form de login tu mismo y no dejar que se autocree.
Podrias poner por ejemplo:
Código Delphi [-]
var
 login:=Tfrmlogin;
begin
  Application.Initialize;
  login:=tfrmlogin.create(nil);
  try
  if login.showmodal=mrok then
  begin
  Application.CreateForm(TFrmPrincipal, FrmPrincipal);
  Application.Run
  end;
  finally
    login.free
  end;
end.

Saludos

jose.ignacio.ve 24-10-2014 01:02:11

Muy bien ya termine. ahora solo necesito saber como hacer que la aplicacion solo se ejecute una vez. osea que si ya la tenes abierta a la aplicacion y le das doble clic al .exe no se abra otra vez?

AgustinOrtu 24-10-2014 02:33:28

Fijate si esto sirve
http://www.clubdelphi.com/trucos/index.php?id=169

jose.ignacio.ve 30-10-2014 02:29:48

hola buenas tardes ya termine la aplicacion! esta todo listo solucione todos los problemas. ahora no puedo hacer que se ejecute en otra maquina.
utilizo Mysql hice un instalador para mi aplicacion que tenga el .exe y la mysqllib.dll instale el mysql en otra maquina pero me aparece un error algo de localhost ya busque por todas partes y n puedo solucionar eso. alguna ayuda.

Casimiro Notevi 30-10-2014 09:38:08

Cita:

Empezado por jose.ignacio.ve (Mensaje 483985)
hola buenas tardes ya termine la aplicacion! esta todo listo solucione todos los problemas. ahora no puedo hacer que se ejecute en otra maquina.
utilizo Mysql hice un instalador para mi aplicacion que tenga el .exe y la mysqllib.dll instale el mysql en otra maquina pero me aparece un error algo de localhost ya busque por todas partes y n puedo solucionar eso. alguna ayuda.

;) Lee esto


La franja horaria es GMT +2. Ahora son las 22:50:33.

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