Ver Mensaje Individual
  #1  
Antiguo 15-09-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Reputación: 18
nfrfabian Va por buen camino
Error grave al mostrar form

Hola a todos. Tengo un problema muy grabe (por lo menos para mi). Les comento. Tengo una aplicación del tipo MDI, la misma tambien tiene form normales, los que muestro con showmodal. Todos los form del proyecto los crea delphi, yo simplemente me limito a mostrar los form normales cuando los necesito.
La aplicacion se conecta a una base de datos MS SQL, todo funciona bien. Pero tuve 2 veces el mismo problema:
Al mostrar un form normal desde un form MDIChild con la instrucion:

edicion.showmodal,

la aplicación me mostro un mensaje del tipo access violation.
La primera vez el error se produjo cuando ejecutaba la aplicacion sin el entorno de delphi, es decir sola. Como se daran cuenta me aparecio el mesaje de error, se cerro la aplicacion y todo se perdio (trabajo realizado, datos corruptos en la base de datos, etc.)

la segunda vez fue desde delphi, en este caso delphi me muestra el error de access violation, se abre el debugger con toda las instrucciones en ensamblador, trato de seguir corriendo la aplicacion con F8, pero es imposible, me muestra el error y se queda en una instruccion en ensamblador

Normalmente este error no se produce, por esta razon me es imposible detectar cual puede ser el problema.
El form se crea desde el inicio, por esta razon siempre esta disponible. Nunca creo un form por codigo. Los form normales los muestro con la instruccion showmodal y los cierro con la instruccion close.
Este form tiene componentes comunes (edits, labels, dbgrid), cuando tiene que utilizar datos de otro form, lo hace por medio de variables globales que las declaro en el mainform.

Buscando en el foro vi que la mayoria crea los form cuando los necesita y despoues los libera. Esto no lo hago porque en algun lado lei que el crear los form toma su tiempo (seguro que son milisegundos), pero este form lo utilizo mucho por lo que me parece que es mejor que se cree desde el inicio. Quizas estoy equivodado.
Me gustaria saber las ventajas y desventajas de la forma en que yo muestro estos forms, y si tengo que crearlos en el momento que los necesito, seguro que lo hago, pero quiero esta seguro que esto solucionara mi problema. A continuacion les muestro el codigo:

codigo del proyecto:

Application.Initialize;
Application.Title := 'SISTEMA1';
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(Tcargareserva, cargareserva);
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(Tedicion, edicion);
...

para mostrar el form utilizo:


vcliente := idcliente; // vcliente variable global

edicion.showmodal;

El form edicion realiza un consulta a la base de datos del cliente y muestra los datos en un dbgrid (tambien tiene otros componentes)

En este momento voy a cambiar la forma de crear de este form. Los pasos que voy a seguir son:
quitar la linea del proyecto que crea el form desde el inicio.

despues llamar al form de la siguiente forma:
if not (edicion is Tedicion) then begin edicion := Tedicion.Create(Self); try edicion.ShowModal; finally edicion.Free; end;Si esta no es la forma correcta, les pido que me digan cual es.Escucho cualquier consejo. Gracias.
Responder Con Cita