Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   EAccessViolation (https://www.clubdelphi.com/foros/showthread.php?t=57674)

Alejandrina 24-06-2008 19:46:57

EAccessViolation
 
Hola a todos,
Tengo la siguiente dificultad al correr el siguiente procedimiento la aplicación me muestra un error de 'Access Violation at address 005B91C9 in module 'XXXXX.exe'. Read of address 00002F0'.

Código:

procedure TFrmProductoEmpaque.DBEcicloKeyPress(Sender: TObject;
  var Key: Char);
begin
    if key=#13 then
        begin
          Key := #0;
          cicloactual:=DBEciclo.Text;
          if cicloinicial<>cicloactual then
            begin
              swciclo:='1';
              if swciclo='1' then
                begin
                  Dmsip.Tblproductos['fechaciclop']:=now;
                  Dmsip.TblProductos['usuariociclop'] := userw;
                end;
              swciclo:='0';
            end;
          perform(wm_nextdlgctl,0,0);
          DmSip.Tblproductos.edit;
          DBEFechaCiclo.text:=datetimetostr(now);
          DBEUsuarioCiclo.Text:=userw;
          DmSip.TblProductos.post;
        end;
end;

El cambio en el campo ciclo se realiza pero la aplicación se me bloquea y no puedo cambiar de registro.

Espero haberme hecho entender y sobre todo que me puedan ayudar.

Gracias :)

Fenareth 24-06-2008 20:46:23

Cita:

Empezado por Alejandrina (Mensaje 295790)
Hola a todos,
Tengo la siguiente dificultad al correr el siguiente procedimiento la aplicación me muestra un error de 'Access Violation at address 005B91C9 in module 'XXXXX.exe'. Read of address 00002F0'.

Código Delphi [-]
procedure TFrmProductoEmpaque.DBEcicloKeyPress(Sender: TObject;
  var Key: Char);
begin
     if key=#13 then
        begin
           Key := #0;
           cicloactual:=DBEciclo.Text;
           if cicloinicial<>cicloactual then
             begin
               swciclo:='1';
               if swciclo='1' then
                 begin
                   Dmsip.Tblproductos['fechaciclop']:=now;
                   Dmsip.TblProductos['usuariociclop'] := userw;
                 end;
               swciclo:='0';
             end;
           perform(wm_nextdlgctl,0,0);
           DmSip.Tblproductos.edit;
           DBEFechaCiclo.text:=datetimetostr(now);
           DBEUsuarioCiclo.Text:=userw;
           DmSip.TblProductos.post;
        end;
end;

El cambio en el campo ciclo se realiza pero la aplicación se me bloquea y no puedo cambiar de registro.

Espero haberme hecho entender y sobre todo que me puedan ayudar.

Gracias :)

En una línea asignas a swciclo:= '1' y en la siguiente línea pones un if swciclo:= '1' then... esa condición siempre se cumplirá no ? Pero esa es solo una observación :o...

Has intentado correr el programa con F7 o F8 para saber exactamente en qué linea te provoca el error ?... Creo que tiene que ver con la función perform que usas...

ecfisa 03-07-2008 15:13:05

Coincido con fenareth la asignación a swciclo no tiene sentido, pero eso no produce el error como tampoco lo hace el perform.
El único error que puedo suponer es que la tabla no esté en dsEdit cuando haces:
Código Delphi [-]
if swciclo = '1' then 
begin    
  Dmsip.Tblproductos.Edit   //  esta la tabla en dsEdit ????
  Dmsip.Tblproductos['fechaciclop']:=now;
  Dmsip.TblProductos['usuariociclop'] := userw;
end;
Reproduje el código usando un ttable con el mínimo requisito para que funcione la procedure. No me dio el error 'Access violation' pero sólo uso lo que envias. Revisa los DataSource de los controles DataAware... también controla como llamas al Form y como lo cierras. Espero que te ayude en algo, suerte

Alejandrina 05-08-2008 16:02:09

EAccessViolation
 
:(Despues de un largo tiempo....
Eh vuelto a retomar este error y aun continua efectivamente Fenareth tiene razón me sobra el swciclo, tambien sigo el consejo de ecfisa pero aún así el error continua. Corriendo el programa con F8 el error me sale en la siguiente lienea:

Código Delphi [-] if (copy(FrmProductos.DBECodigo.Text,1,2)='43') or (copy(FrmProductos.DBECodigo.Text,1,2)='35') or (copy(FrmProductos.DBECodigo.Text,1,2)='44') or (copy(FrmProductos.DBECodigo.Text,1,2)='45') or (copy(FrmProductos.DBECodigo.Text,1,2)='42')then

El procedimiento completo es el siguiente, espero me puedan dar algo de luces ya que no se que hacer. Gracias

Código Delphi [-]procedure TDMsip.TblproductosBeforePost(DataSet: TDataSet);
begin
if (TblUsuarios['codigo_area']='002') or (userw = 'SYSDBA') or (userw = '001') then
else
//se vuelve a validar para que produccion pueda modificar el campo ciclo
if (TblUsuarios['codigo_area']='001') or (userw = '001') then
else
begin
ShowMessage('Usuario no autorizado para Insertar o Modificar');
abort;
end;
if TblProductos['referencia']='' then
begin
ShowMessage('Se requiere la referencia del producto');
abort;
end;
if DmSip1.TblCriticaProducto.locate('referencia',TblProductos['referencia'],[]) then
begin
DmSip1.TblCriticaProducto.edit;
DmSip1.TblCriticaProducto['productos'] := 'X';
DmSip1.TblCriticaProducto.post;
end;
if DmSip1.TblCriticaProductoDecorado.locate('referencia',TblProductos['referencia'],[]) then
begin
DmSip1.TblCriticaProductoDecorado.edit;
DmSip1.TblCriticaProductoDecorado['productos'] := 'X';
DmSip1.TblCriticaProductoDecorado.post;
end;
if TblProductos['plano'] = null then
TblProductos['plano'] := '';
if TblProductos['plano_interno'] = null then
TblProductos['plano_interno'] := '';
if (copy(FrmProductos.DBECodigo.Text,1,2)='43') or (copy(FrmProductos.DBECodigo.Text,1,2)='35') or (copy(FrmProductos.DBECodigo.Text,1,2)='44') or (copy(FrmProductos.DBECodigo.Text,1,2)='45') or (copy(FrmProductos.DBECodigo.Text,1,2)='42')then
else
if (TblProductos['plano']='') and (TblProductos['plano_interno']='') then
begin
ShowMessage('Debe digitar al menos un plano');
abort;
end;
//end;
if TblProductos['plano']<> '' then
begin
if TblProductos['plano_interno']='' then
else
begin
ShowMessage('Solo se debe digitar un plano');
abort;
end;
end;
if ingresarp then
TblProductos['listaprecios']:='N';
//OJO CAMBIO PARA PODER GRABAR FECHA MIRAR QUE PASA
//OJO MIRAR QUE PASA PARA CAMBIA EL ESTADO EN REFERENCIA SALE ERROR
if cambiapeso then
begin
TblColorProducto.locate('referencia',TblProductos['referencia'],[]);
TblColorProducto.edit;
TblColorProducto['fechamodificacion']:= now;
TblColorProducto['usuario']:= userw;
TblColorProducto.post;
end;
cambiapeso := false;
end;


La franja horaria es GMT +2. Ahora son las 02:32:49.

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