Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Access Violation (https://www.clubdelphi.com/foros/showthread.php?t=73597)

JerS 04-05-2011 00:09:29

Ayuda con Access Violation
 
Buenas, amigos me aparece la excepción "Access Violation at address 004022E6 in module proyecto.exe" . pero lo curioso es que no es siempre que sucede
Código Delphi [-]
                    ZQuery2.Close;
                    ZQuery2.SQL.Clear;
                    ZQuery2.SQL.Add('Select antes from DetallePersonal Inner Join TipoPersonal on cedula='+quotedstr(cedula)+'and cod_tipo=codigo and antes<>"00:00:00"');
                    ZQuery2.Open;
                      IF Not ZQuery2.Eof Then
                        cadenaantes:=ZQuery2.FieldbyName('Antes').AsString
                      Else
                        cadenaantes:='00:00';

esperando su ayuda gracias, esto me tiene loco

Caral 04-05-2011 00:14:31

Hola
Usa parametros y veras por que te manda el error.
Asi, de pasada me imagino que codigo no lo entiende la BD.
Saludos

oscarac 04-05-2011 00:14:35

trata de colocar tus instrucciones en varias lineas para pdoer entenderla mejor

y en que instruccion te aparece el error?

Caral 04-05-2011 00:21:30

Hola
Código Delphi [-]
  ZQuery2.Close;
  ZQuery2.SQL.Clear;
  ZQuery2.SQL.Add('Select antes from DetallePersonal Inner Join TipoPersonal on cedula = :Num0 and cod_tipo = :Num1 and antes <> :Num2 ');
  ZQuery2.Params[0].Value:= quotedstr(cedula);
  ZQuery2.Params[1].Value:= codigo; // que es ????
  ZQuery2.Params[2].Value:= "00:00:00";
  ZQuery2.Open;
  IF Not ZQuery2.Eof Then
  cadenaantes:= ZQuery2.FieldbyName('Antes').AsString
  Else
  cadenaantes:='00:00';
Saludos
PD: Tienes dos tablas, que campo es de que tabla???????

JerS 04-05-2011 00:51:25

Cita:

Empezado por Caral (Mensaje 398801)
Hola
Código Delphi [-]
  ZQuery2.Close;
  ZQuery2.SQL.Clear;
  ZQuery2.SQL.Add('Select antes from DetallePersonal Inner Join TipoPersonal on cedula = :Num0 and cod_tipo = :Num1 and antes <> :Num2 ');
  ZQuery2.Params[0].Value:= quotedstr(cedula);
  ZQuery2.Params[1].Value:= codigo; // que es ????
  ZQuery2.Params[2].Value:= "00:00:00";
  ZQuery2.Open;
  IF Not ZQuery2.Eof Then
  cadenaantes:= ZQuery2.FieldbyName('Antes').AsString
  Else
  cadenaantes:='00:00';
Saludos
PD: Tienes dos tablas, que campo es de que tabla???????

Todos los campos son de la tabla TipoPersonal y el campo código es la relación entra la tabla de TipoPersonal con DetallePersonal

JerS 04-05-2011 00:54:32

Utilizando Parámetros que diferencia tiene??

Caral 04-05-2011 02:33:51

Hola
A la hora de depurar, de ver que o cuales problemas se tiene el programa hace un recorrido, con parametros se puede identificar el problema con exactitud.
Otra cosa, los datos se envian en su correcta forma, sea integer, string, etc, etc.
Saludos

rrf 04-05-2011 18:21:02

Hola.

No tengo muy claro si esto te puede ayudar; pero te comento que hace poco tuve un problema bastante parecido, al menos en lo referente a "Access Violation" (no recuerdo el número que le acompañaba).

Fue usando Firebird 2.0.5 . Casi me vuelvo loco porque no daba con la posible causa del problema.

Finalmente, opté por cambiar a Firebird 2.1.3 (incluido el archivo fbclient.dll) y desaparecieron los "fantasmas" del "Access Violation". Supongo que era un error de las Zeos con esa versión de Firebird.

Saludos

JerS 04-05-2011 21:24:21

Cita:

Empezado por rrf (Mensaje 398899)
Hola.

No tengo muy claro si esto te puede ayudar; pero te comento que hace poco tuve un problema bastante parecido, al menos en lo referente a "Access Violation" (no recuerdo el número que le acompañaba).

Fue usando Firebird 2.0.5 . Casi me vuelvo loco porque no daba con la posible causa del problema.

Finalmente, opté por cambiar a Firebird 2.1.3 (incluido el archivo fbclient.dll) y desaparecieron los "fantasmas" del "Access Violation". Supongo que era un error de las Zeos con esa versión de Firebird.

Saludos

Muchas Gracias rrf pero estoy utilizando Zeos 6.6.6, Mysql 4.1 y Delphi 7

JerS 14-05-2011 20:58:31

Nadie ha pasado por un problema como este??? tambien me esta pasando en la siguiente parte del codigo

Código Delphi [-]
      Try
        Hora.Close;
        Hora.SQL.Clear;
        Hora.SQL.Add('Select (time_format(Current_time,"%H:%i"))as Hora, (time_format(Current_time,"%h:%i %p"))as HoraAMPM ');
        Hora.Open;
        label25.Caption:=Hora.Fields[0].AsString;
        label8.Caption:=Hora.Fields[1].AsString;
        Application.ProcessMessages;
      Except on e:exception do
        Escribir('*****Exepcion al Actualizar la Hora: '+label25.Caption+' en el Timer Hora');
      End;

Arrojandome esta Excepcion: *****Exepcion al Actualizar la Hora: 10:33 en el Timer Hora

este codigo esta en un TTimer el cual tiene un intervalo de 10000

waly2k1 19-06-2011 18:27:08

Posible Solucion
 
Si no siempre te da el error es porque a veces tienes abierta la consulta
con lo cual con Hora.Close la cierras
y cuando no está abierta con
Hora.Close te va a generar el problema.
No es un problema de parametros
sino te sería mas claro el error y no algo que haga referencia a una
posición de memoria o un objeto inexistente.

Además usando parametros con ParamByName queda mucho mas prolijo
el codigo y no debes estar usando apóstrofes ni convirtiendo cadenas a
nros o viceversa, simplemente mandas el valor, te evita ademas
problemas de configuración regional en fechas y numeros.

Y sobre todo codigo mas legible para que puedan analizarlo y echarte una
mano. No es web, no mezquines caracteres ni lineas hehe.
Saludos


JerS 13-01-2012 20:18:04

Buenas después de 7 años sigo presentando el mismo problema en mi aplicación , pero esta vez en esta fragmento del codigo

Código Delphi [-]
    ZQuery3.Close;
    ZQuery3.SQL.Clear;
    ZQuery3.SQL.Add('Select acceso from permisos p,detallepermisos d where cedula=:cedula and p.codigo=d.codigo and fecha=current_date');
    ZQuery3.ParamByName('cedula').AsString:=cedula;
    escribir('Consulta para Obtener el Valor de Permiso');
    ZQuery3.Open;
      If Not ZQuery3.EOF Then
        Permiso:=ZQuery3.Fields[0].AsInteger
      Else
        Permiso:=0;

estoy usando una base de datos en mysql 4.11 , Delphi 7 el campo acceso es de tipo integer ..

Use los consejos que me dan en este hilo como usar parámetros en mi consulta, pero sigue el mismo problema. Mi aplicación puede pasar 3 días seguidos 24 horas al día por este fragmento de código sin generar ningún problema pero derrepente me arroja la Siguiente Excepción:

*****Excepcion en el Cuerpo Principal del Sistema Access violation at address 004022E6 in module 'Program1.exe'. Write of address 0794B3D8

me aconsejan no Utilizar el ZQuery3.Close; porque puede generar algún problema si la consulta no esta abierta, pero siempre lo he utilizado así en todas mis aplicaciones y de
verdad a parte de este fragmento de código me ha funcionado bien.


Espero sus aportes muchas gracias

waly2k1 14-01-2012 10:10:01

Cita:

Empezado por JerS (Mensaje 422919)
Buenas después de 7 años sigo presentando el mismo problema en mi aplicación , pero esta vez en esta fragmento del codigo

Código Delphi [-] ZQuery3.Close; ZQuery3.SQL.Clear; ZQuery3.SQL.Add('Select acceso from permisos p,detallepermisos d where cedula=:cedula and p.codigo=d.codigo and fecha=current_date'); ZQuery3.ParamByName('cedula').AsString:=cedula; escribir('Consulta para Obtener el Valor de Permiso'); ZQuery3.Open; If Not ZQuery3.EOF Then Permiso:=ZQuery3.Fields[0].AsInteger Else Permiso:=0;


estoy usando una base de datos en mysql 4.11 , Delphi 7 el campo acceso es de tipo integer ..

Use los consejos que me dan en este hilo como usar parámetros en mi consulta, pero sigue el mismo problema. Mi aplicación puede pasar 3 días seguidos 24 horas al día por este fragmento de código sin generar ningún problema pero derrepente me arroja la Siguiente Excepción:

*****Excepcion en el Cuerpo Principal del Sistema Access violation at address 004022E6 in module 'Program1.exe'. Write of address 0794B3D8

me aconsejan no Utilizar el ZQuery3.Close; porque puede generar algún problema si la consulta no esta abierta, pero siempre lo he utilizado así en todas mis aplicaciones y de
verdad a parte de este fragmento de código me ha funcionado bien.


Espero sus aportes muchas gracias


Primero que nada prueba con esto
ZQuery3.Active := false; // en lugar de esto: ZQuery3.Close;

Segundo: la Consulta SQL por qué mejor no la pones en una variable e identificas bien los campos de cada tabla
y la unes con inner join?
Ejemplo:
Código:

sSQL := 'SELECT acceso FROM permisos P ' +
            'INNER JOIN detallepermisos D ON ( P.codigo=D.codigo ) '    +
            'WHERE P.cedula=:cedula AND D.fecha=current_date';
(Ojo asumo que los campos de cada tabla que escribes corresponden a cierto alias)
   
    ZQuery3.Active := false;
    ZQuery3.SQL.Clear;
    ZQuery3.SQL.Add( sSQL );
    ZQuery3.ParamByName( 'cedula' ).Value := cedula;
    escribir('Consulta para Obtener el Valor de Permiso');
    ZQuery3.Active := true;
   
    Permiso:=0;
    if not ZQuery3.Eof then Permiso := ZQuery3.FieldByName( 'acceso' ).AsInteger;

Tampoco se que tipo de campos son, por eso nose si haces bien las conversiones o no, Quizas conviertes
un valor y lo hace bien, pero recibes un valor que no puede convertir. Como por ej. si recibes un valor
99000 ya no puedes ponerlo como un entero corto (smallint).

Bueno, espero te sirva de algo mis consejos o el pequeño código. Pero no debe estar muy lejos el error
Deberías debuggear cuando salta el error y ver las variables que valores poseen.
Saludos y exitos!

JerS 16-01-2012 14:28:51

Saludos desde Venezuela amigo waly2k1, muchas gracias por tu aporte. ya cambie en mi código la linea de
Código Delphi [-]
ZQuery3.Close;
por
Código Delphi [-]
ZQuery3.Activate:=False;
y asigne el string de la consulta a una variable para probar. con respecto a los tipos de datos los campos códigos son de tipo Integer , cedula es un Varchar(20) y fecha es Date. ahora solo queda someter a prueba el codigo y cualquier cosa te aviso.. muchas gracias de nuevo


La franja horaria es GMT +2. Ahora son las 22:10:07.

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