PDA

Ver la Versión Completa : Problema de Access Violation en Delphi XE2


jose.ignacio.ve
23-10-2014, 03:45:37
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

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,

...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

Error al minimizar (http://www.clubdelphi.com/foros/showthread.php?t=86700&highlight=nelson+showmodal)
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.

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

...
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:


FPrincipal.Close;
FLogin.Show;


Y si quiero cerrar la aplicacion lo que hago es:


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:
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
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 (http://www.clubdelphi.com/foros/guiaestilo.php)