Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Raised exception class (https://www.clubdelphi.com/foros/showthread.php?t=69822)

amparog 11-09-2010 00:46:57

Raised exception class
 
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.

Código Delphi [-]
   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,
Código Delphi [-]
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.:)


La franja horaria es GMT +2. Ahora son las 03:05:44.

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