PDA

Ver la Versión Completa : Raised exception class


amparog
11-09-2010, 00:46:57
Hola a todos!!! Mi problema es el siguiente.
Se hicieron unos cambios en un sistema desarrollado en Delphi 7 con una BD en SQL Server 2000.
Cuando se lo implementó, se cambió la BD según los nuevos requerimientos y se copió la carpeta con todas las modificaciones hechas…
Se abrió el Delphi, se cambió las conexiones a la BD , se probó que se conectara. Se compiló.
Se le ingresaron datos. El problema surge cuando se intenta mostrar los datos guardados en la BD. En algunos casos muestra datos que no corresponden los valores guardados y en otros directamente no muestra nada. Si se hace una consulta a la BD directamente los datos están bien guardados.
Si se compila paso a paso, en el evento On Show muestra el siguiente mensaje de error: “Project Personal.exe Raised exception class EAccessViolation wit message `Access Violation at address 00645E OC in module Write of adress 00645e OC”
Si directamente se utiliza un ejecutable compilado en otra pc funciona perfectamente.
Si se compila paso a paso en otra PC tampoco da error
Se agradece cualquier tipo de sugernercias… muchas gracias

ecfisa
11-09-2010, 01:49:19
Hola amparog.

La excepción que te muestra es por un acceso inválido a memoria, habitualmente debido a que se utiliza algún recurso no creado o asignado.

Para poder orientarte más, sería de mucha utilidad que pusieses el código que se ejecuta en el evento OnShow.


Saludos.

amparog
11-09-2010, 14:51:33
hola Ecfisa, te mando el código del evento On show.


Procedure TfrmEvaluacionPersonal.TabAreaShow(Sender: TObject);
begin
w_Area:=0;
with clicoopera do begin
close;
params.ParamByName('numero').AsInteger:=Prop_Funcionario;
params.ParamByName('fecha').Asdate:=dbefecha.date;
params.ParamByName('area').AsInteger:=1;
params.ParamByName('Nivel').AsInteger:=1;
Open;
if not isempty () then begin
w_area:=w_area+puntos(CliCoopera.fieldvalues['IdArea'],CliCoopera.fieldvalues['IdNivel'],CliCoopera.fieldvalues['IdEvaluacion']);
end else begin
w_area:=w_area;
end;
end;
with cliInteres do begin
close;
params.ParamByName('numero').AsInteger:=Prop_Funcionario;
params.ParamByName('fecha').Asdate:=dbefecha.date;
params.ParamByName('idarea').AsInteger:=1;
params.ParamByName('idNivel').AsInteger:=2;
Open;
if not isempty () then begin
w_area:=w_area+puntos(CliInteres.fieldvalues['IdArea'],Cliinteres.fieldvalues['IdNivel'],CliInteres.fieldvalues['IdEvaluacion']);
end else begin
w_area:=w_area;
end;
end;
end;



Puntos es una función que me devuelve un valor a partir de los parámetros pasados.
Los datos me los muestra en un Combobox. No se si la información enviada es suficiente.

Saludos y Muchas Gracias

ecfisa
12-09-2010, 00:18:59
Hola amparog.

Hay algunos begin/end de más y una asignación a w_area que es innecesaria, ya que si no se cumple la condición,
su valor siempre queda igual a 0,

procedure TfrmEvaluacionPersonal.TabAreaShow(Sender: TObject);
begin
w_Area:=0;
with clicoopera do
begin
close;
params.ParamByName('numero').AsInteger:=Prop_Funcionario;
params.ParamByName('fecha').Asdate:=dbefecha.date;
params.ParamByName('area').AsInteger:=1;
params.ParamByName('Nivel').AsInteger:=1;
Open;
if not isempty () then
w_area:= w_area + puntos(CliCoopera.fieldvalues['IdArea'],
CliCoopera.fieldvalues['IdNivel'],
CliCoopera.fieldvalues['IdEvaluacion'])
end;
with cliInteres do
begin
close;
params.ParamByName('numero').AsInteger:=Prop_Funcionario;
params.ParamByName('fecha').Asdate:=dbefecha.date;
params.ParamByName('idarea').AsInteger:=1;
params.ParamByName('idNivel').AsInteger:=2;
Open;
if not isempty () then
w_area:= w_area + puntos(CliInteres.fieldvalues['IdArea'],
Cliinteres.fieldvalues['IdNivel'],
CliInteres.fieldvalues['IdEvaluacion'])
end;
end;

pero no veo nada en esas líneas que pueda provocar la excepción que te aparece; a menos que estuviera en la función puntos...

Ahora, tomando en cuenta que en otro equipo compila y funciona bién, ¿ Revisaste el estado del equipo en que provoca el fallo
(estado del disco, virus, malware, etc) ?

Saludos.:)