Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error de CPU al visualizar un formulario (https://www.clubdelphi.com/foros/showthread.php?t=54697)

teclilla 27-03-2008 19:17:36

Error de CPU al visualizar un formulario
 
Hola amigos, estoy terminando una aplicacion en Delphi 5 sobre presupuestos y albaranes con base de datos en Paradox 7 y tengo un problema cuando el programa está en ejecucion.
La aplicación compila bien y ejecuta bien, cuando esta en uso los demas formularios funcionan bien, es decir, pulso en el boton de cliente y muestra el formulario correspondiente, etc. pero con el de presupuestos no es así, al pulsar el boton para que muestre el formulario de presupuestos me sale la ventana de CPU y se para.
El formulario se crea bien y completamente:
Código Delphi [-]
procedure TFormPresupuestos.FormCreate(Sender: TObject);
begin
        //abrimos tablas
        TPresupuestos.Open;
        TPresupuestos.First;
        ComprobarContrato;
        TCliente.Open;
        TProductos.Open;
        TPresProdDetalle.Open;
        PresupuestoBuscado:=-1;
        importes:=TPresupuestos.FieldByName('SumaTotal').asFloat;
        DBEditsLectura;
        SpeedButtonConfirmar.Visible:=false;
        SpeedButtonCancelar.Visible:=false;
end;
Alguien puede indicarme a que puede ser debido, muchas gracias de antemano.
P.D.: No sabia donde poner este nuevo tema.

cloayza 27-03-2008 21:10:06

Puedes dar mas de informacion sobre que realizar estos procedimientos?

ComprobarContrato;

DBEditsLectura;


Tienes algo de codigo en los eventos del las Tablas (BeforeOpen, AfterOpen,...)?

Saludos desde
Concepcion-Chile

teclilla 28-03-2008 16:56:07

ComprobarContrato es llamado en Tpresupuestos en el evento AfterScroll y comprueba si para un presupuesto existe un contrato:
Código Delphi [-]
procedure TFormPresupuestos.ComprobarContrato;
begin
        if (TPresupuestosContrato.IsNull) then
           SpeedButtonContrato.Caption:='Hacer contrato'
           else SpeedButtonContrato.Caption:='Ver contrato';
end;

En el evento BeforeDelete de Tpresupuestos se realiza lo siguiente (borra cada linea de detelle del presupuesto de la tabla detalle (maestro/detalle):

Código Delphi [-]
QCanBorD.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
        QCanBorD.ExecSQL;
        QCanBorD.Close;

Las demás tablas no tienen nada en los eventos.
Y DBEditsLectura pone campos para solo lectura:
Código Delphi [-]
procedure TFormPresupuestos.DBEditsLectura;
begin
        DBEditIdpre.ReadOnly:=true;
        DBEditFechaPre.ReadOnly:=true;
        DBEditLinst.ReadOnly:=true;
        DBEditSuma.ReadOnly:=true;
        DBMemoFp.ReadOnly:=true;
        DBMemoObs.ReadOnly:=true;
        EditCodigo.Text:='';
        EditNombre.Text:='';
        EditCantidad.Text:='';
        PanelProd.Enabled:=false;
        PanelCli.Enabled:=false;
        SpeedButtonAnaLProd.Enabled:=false;
        SpeedButtonQuiLProd.Enabled:=false;
end;

He puesto puntos de ruptura y el FormCreate lo realiza todo y se para justo en el end; danto error de CPU.
Alguna idea?
Muchisimas gracias por tu contestación, estoy atascada ahí.
GRACIAS.

cloayza 28-03-2008 19:32:43

No logro detectar problemas a tu codigo.

Te aconsejo que deshabilites el codigo de ese formulario y lo vayas incorporando de a poco para asi detectar donde podria estar el problema.

En alguna ocacion me paso algo similar, esto se debia a que estaba usando algun objeto de un formulario que no habia sido creado.

Saludos desde
Concepcion-Chile

Black_Ocean 28-03-2008 19:45:30

Revisa esta parte
Código Delphi [-]
        PresupuestoBuscado:=-1;
        importes:=TPresupuestos.FieldByName('SumaTotal').asFloat;
        DBEditsLectura;
        SpeedButtonConfirmar.Visible:=false;
        SpeedButtonCancelar.Visible:=false;

AsFloat podría estar causando el error en la conversión. Pon un breakpoint en la línea PresupuestoBuscado:=-1; y tracea el código desde ahí hasta el final de la rutina presionando la tecla F7 y será más facil detectar el error y revisa la configuración de ese campo en la DB.

Saludos.

teclilla 02-04-2008 10:10:42

Muchas gracias por tu contestación, he realizado lo que me has aconsejado y al ejecutar paso a paso no hay problema, realiza todas las instrucciones. SumaTotal es un campo tipo $(Money), pero esa instruccion, al parecer la realiza correctamente, de hecho termina todo el procedimiento hasta llegar al end y a la hora de visualizarlo es cuando falla y se para, pero si en ese momento le das dos veces mas al boton de ejecutar la aplicacion sigue y se ejecuta al completo. No se que puede pasar, he pensado que falla en algo de la visualizacion, igual tiene que ver con alguna biblioteca *.bpl o algo así, pero no tengo ni idea, ojala alguien tenga alguna inspiración.
Muchas gracias.
Teclilla.

teclilla 04-04-2008 11:29:30

Al parecer tiene algo que ver con esto:

Delphi 5versusXP’s ntdll.DbgBreakPoint

la explicación está en la siguiente dirección:

http://home.att.net/~owen_labs/rant9.htm

pero no la entiendo, ya que soy bastante novata en el tema de programación, al parecer tiene que ver con el IDE.
Os agradeceria algun tipo de ayuda.
GRACIAS.




teclilla 04-04-2008 17:22:02

Ya he averiguado porque era :)

Si alguien tiene esta duda, eh aquí la solucion:
la propiedad scaled del formulario que daba el error la tenia a false, igual la cambie sin darme cuenta, este fallo tonto me ha traido de cabeza.
Puse el punto de ruptura tal y como me dijiste y realizaba todo el procedimiento hasta el final, entonces a la hora de visualizar el formulario era cuando aparecia el error y se paraba y todo era por esta propiedad.

Gracias.


La franja horaria es GMT +2. Ahora son las 04:35:12.

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