Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mensaje de error (https://www.clubdelphi.com/foros/showthread.php?t=61822)

ale_metall 23-11-2008 23:05:09

mensaje de error
 
hola gente, esta vez consulto por el siguiente mensaje de error que me aparece al ejecutar la aplicacion y presionar un boton. y luego se cuelga el prog.

Proyect1.exe raised exception class EAccessViolation with message 'access violation at address 00002E73. Read of address 00002E73'. Process stopped. Use Step or Run to continue.

Alguien sabe a q se refiere el error?? necesitan el codigo o se trata de algo externo?? parece una direccion de memoria, pero no se!!! reinicie el sistema y el win pero sigue ocurriendo!!!

delphi6

gracias...

enecumene 23-11-2008 23:10:11

¿La aplicación trabaja con bases de datos?, si es así puede que no está encontrando la BD, si no es así, necesitamos código :rolleyes:

Saludos.

ale_metall 23-11-2008 23:15:55

si, con base de datos en paradox, la primera vez q presiono el boton va bien, en la segunda se cuelga... el codigo es un choclazo, lo paso?? porq siempre lo use y nunca me daba ese error y comenzo de repente sin haber editado el codigo...

enecumene 23-11-2008 23:17:13

Sólo debes pasar el código donde te da el error, ¿a qué te refieres con choclazo? :D

Saludos.

ale_metall 23-11-2008 23:21:12

Código Delphi [-]
procedure TForm16.SpeedButton1Click(Sender: TObject);
var band:boolean; usuarioactivo,consulta:string; ultimo,ultimo1,NroUsuario,categoria:integer; TotalAnterior:real;
begin
 if (edit1.Text='') or (edit2.text='') then
   begin
     MessageBox(Handle,
     PChar('Debe completar los campos solicitados antes de iniciar ' + #13#10 +
     'sesión.'),PChar('Datos Erroneos'),
     MB_OK + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL);
     edit1.SetFocus;
    end
  else
   begin
    band:=false;
    table1.Open;
    table1.First;
    repeat
     if table1.FieldByName('Loggin').asstring=edit1.Text
      then
       begin
           band:=true;
           if table1.Fieldbyname('CantIntentos').AsInteger>=3
              then
                 begin
                   MessageBox(Handle,
                   PChar('La cuenta ha sido bloqueada por ingresar repetidos datos erroneos, contactese con el ' + #13#10 +
                   'administrador del sistema.'),
                   PChar('Reiterados ingresos erroneos'),
                   MB_OK + MB_ICONINFORMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
                   edit1.clear;
                   edit2.Clear;
                   edit1.setfocus;
                   end
        else
          begin
            if table1.FieldByName('Password').asstring=edit2.Text
                 then
                   begin              //tabla Usuarios
                    table1.edit;
                    table1.FieldByName('Activo').asboolean:=True;
                    table1.FieldByName('CantIntentos').asinteger:=0;
                    usuarioactivo:=table1.FieldByName('Loggin').asstring;
                    NroUsuario:=table1.FieldByName('NroUsuario').asinteger;
                    table1.Post;
                    table1.Close;
                    form1.Table1.Open;
                    form1.Table2.Open;
                    form1.Table3.Open;
                    form1.Table4.Open;
                    form1.timer1.Enabled:=true;
                    edit1.clear;
                    edit2.clear;
                    edit1.setfocus;
                    form16.Hide;
                    form22.destroy;
                    form10.Table5.Open;    //Tabla totalCajaTurno
                    form10.table5.last;    //crea un registro para el total de la caja durante la sesion iniciada. (table5)
                    ultimo:=form10.table5.fieldbyname('NroTurno').asinteger;
                    TotalAnterior:=form10.table5.fieldbyname('Total').ascurrency;
                    form10.table5.insert;
                    form10.table5.fieldbyname('NroTurno').asinteger:=ultimo+1;
                    form10.table5.fieldbyname('FechaHoraInicio').asstring:=datetimetostr(now);
                    form10.table5.fieldbyname('CodUsuario').asinteger:=NroUsuario;
                    form10.Table5.Post;
                    form10.Table1.Open;
                    form10.table1.last;
                    ultimo1:=form10.table1.FieldByName('NroMovimiento').asinteger;
                    form10.table1.edit;
                    form10.table1.Insert;
                    form10.table1.FieldByName('NroMovimiento').asinteger:=ultimo1+1;
                    form10.table1.fieldbyname('Fecha').AsDateTime:=(Date);
                    form10.table1.fieldbyname('Detalle').asstring:='Total Turno Anterior.';
                    form10.table1.fieldbyname('Entrada').AsCurrency:=TotalAnterior;
                    form10.table1.fieldbyname('Salida').AsCurrency:=0;
                    form10.table1.fieldbyname('Facturado').AsBoolean:=false;
                    form10.table1.FieldByName('CodES').asinteger:=0;
                    form10.table1.FieldByName('CodResponsable').asinteger:=form10.table5.FieldByName('CodUsuario').asint  eger;
                    form10.table1.FieldByName('CodTurno').asinteger:=ultimo+1;
                    form10.table1.Post;
 
                    form10.table5.last;
                    form10.query1.SQL.Clear;
                    consulta:='select (((SUM(Entrada))-(SUM(Salida)))) as TotalTurno from CajaDiaria ';
                    consulta:=consulta+'where CodTurno=:valor';
                    form10.query1.SQL.Add(consulta);
                    form10.query1.ParamByName('valor').asinteger:=form10.table5.FieldByName('NroTurno').asinteger;
                    form10.query1.Open;
                    form10.query1.Active;
                    form10.Table5.edit;
                    form10.Table5.FieldByName('Total').Value:=form10.Query1.fieldByName('TotalTurno').Value;
                //Table5.FieldByName('Total').Ascurrency:= strtofloat(Query1.fieldByName('TotalTurno').asString);
                    form10.Table5.Post;
                    form10.Table1.close;
                    form10.Table5.close;

                   // form10.Table5.Close;
                    form1.Visible:=true;
                    form1.show;
                    form1.table4.First;
   while form1.table4.Eof=false do                           //Busca el usuario activo, guarda la categoria y
    begin                                              // filtra la tabla categoria por esa categoria.
    if form1.table4.FieldByName('Activo').asboolean= true
      then categoria:=form1.table4.FieldByName('NroCategoria').asinteger;
     form1.table4.Next;
     end;
     if categoria=2 then
        begin
         form1.speedbutton10.Enabled:=false;
         form1.speedbutton13.Enabled:=false;
         form1.speedbutton15.Enabled:=false;
         form1.speedbutton16.Enabled:=false;
         form1.speedbutton17.Enabled:=false;
         form1.speedbutton18.Enabled:=false;
         form1.speedbutton7.Enabled:=false;
         end;
        end
                  else
                   begin
                    MessageBox(Handle,
                    PChar('La Contraseña no corresponde al usuario Ingresado.Vuelva a ingresarla, si la ha olvidado contactese con el administrador del sistema.'),
                    PChar('Contraseña Erronea'),
                    MB_OK + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL);
                    table1.Edit;
                    table1.FieldByName('CantIntentos').asinteger:=table1.FieldByName('CantIntentos').asinteger+1;
                    table1.Post;
                    edit2.Clear;
                    edit2.setfocus;
                   end;
          end;
       end
      else
         table1.Next;
    until (table1.eof=true) or (band=true);
   if band=false then
    begin
      MessageBox(Handle, 
             PChar('Asegúrese de ingresar datos correctos.'),
             PChar('Usuario Inexistente'),
             MB_OK + MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
      edit1.Clear;
      edit2.clear;
      edit1.setfocus;
    end;
end;
end;

eso es un choclazoo!!

me tengo q ir a laburar, mas tarde t respondo!! pero insisto, comenzo de repente el error y no habia editado este codigo...

saludos

enecumene 23-11-2008 23:22:36

Ya me lo imaginaba :eek: :rolleyes: :rolleyes:

Caral 23-11-2008 23:23:11

Hola
Cita:

Empezado por enecumene (Mensaje 327534)
Sólo debes pasar el código donde te da el error, ¿a qué te refieres con choclazo? :D

Saludos.

Me imagino que es un Choclo grande:D
Choclo en algunos paises es Elote, Maiz, ojuela.
Saludos

enecumene 23-11-2008 23:25:02

Pues es un Elote/Maiz/Hojuela GIGANTE :eek:

Caral 23-11-2008 23:39:40

Hola
Despues de ver este Choclo enorme y sin sentido diria que para hacer este Choclazo mejor usar un Datamodule y ordenar todo este ir y venir del form16 al 1 al 5 y no se cuantos mas.
En el momento que falle algo no se sabra donde esta el Choclo.
Otra cosa seria poner una Gallina por codigo y que empiece a descifrar el choclo.:D
Saludos

ale_metall 24-11-2008 02:02:15

Bueno, solo tengo q programar en delphi para aprobar una materia y no soy experto como udes.. simplemente digan q no pueden ayudarme y listo..

saludos...

Al González 24-11-2008 07:50:31

Hola ale_metall.

No creo que haya que ponerse brusco. Entendemos tu apuro, pero a la vez esperamos que entiendas que no siempre es fácil ayudar con prontitud y eficacia. Y mantener cierto respeto es importante.

Tu caso no parece ser como muchos otros donde un alumno de programación básicamente solicita que le hagan la tarea (los deberes). Se nota que estás esforzándote en cumplir con el compromiso de la materia.

El error Access Violation es común cuando se está usando memoria de programa de forma inadecuada. La mayoría de las veces tiene que ver con variables objetos que son liberadas (destruidas) antes de tiempo o nunca inicializadas.

Por los datos que nos has proporcionado, pareciera que el programa intenta acceder, usar o hacer referencia a alguna parte de un objeto que anteriormente era válido, pero luego fue destruido. Ese objeto destruido prematuramente (o referido más de lo que es necesario) podría ser Form22, ya que es el único que a simple vista liberas en el código.

Una segunda llamada al manejador de evento SpeedButton1Click podría desembocar en una excepción Access Violation al llegar a la sentencia "form22.destroy", porque el objeto ya habría sido destruido en la primera ejecución del código.

Por otro lado te recomiendo estudiar temas relacionados con el depurador, como son los puntos de ruptura, las observaciones y la pila de llamadas. El depurador de Delphi es uno de los mejores que existen (si no es que el mejor). Es una herramienta integrada en el IDE que te permite seguirle la pista a cada pequeña cosa que hace tu programa al estar ejecutándose, y así descubrir más fácilmente la causa de los fallos.

Saludos.

Al González :)

ale_metall 24-11-2008 22:35:55

si, en efecto como me destribiste era eso lo que sucedia... yo pude descubrirlo porq fui probando de forma manual y burda con un showmessage en diferentes partes del codigo y en el form22.destroy surge, la primera vez lo destruyo yl as veces siguientes que llamo al procedimiento en cuestion ya no hay q destruirlo porq no existe... era simplemente eso!!! graciasporla atencion

saludos...


La franja horaria es GMT +2. Ahora son las 09:07:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi