Ver Mensaje Individual
  #13  
Antiguo 14-01-2012
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Reputación: 18
waly2k1 Va por buen camino
Cita:
Empezado por JerS Ver Mensaje
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!
Responder Con Cita