Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Mejor Forma de Utilizar TZQuery (https://www.clubdelphi.com/foros/showthread.php?t=66559)

JerS 26-02-2010 01:35:01

Mejor Forma de Utilizar TZQuery
 
Buenas amigos como estan, en esta ocasion los molesto para que me ayuden a saber cual es la mejor forma de utilizar un TZQuery, ya que estoy haciendo esto:

Código Delphi [-]
ZQuery1.Close;  
ZQuery1.SQL.Clear;  
ZQuery1.SQL.Add('Select acceso from permisos p,detallepermisos d where cedula='+quotedstr(cedula)+' and p.codigo=d.codigo and fecha='+quotedstr(FormatDateTime('yyyy/mm/dd',fechaServerL)));
ZQuery1.Open;     
If Not ZQuery1.EOF then

y me arroja la excetion Acces Violation as address 0040241C .....

lo raro es que no es todo el tiempo , yo puedo pasar por estas lineas de codigo 10 veces seguidas consecutivas y no pasa nada pero en cierto momento me arroja la exception, si me pudieran ayudar de verdad les estaria agradecido...

rgstuamigo 26-02-2010 15:15:39

Algunas interrogantes
 
* Estas trabajando con MySQL?:confused:
* Las variables cedula y fechaServerL ¿qué contienen antes de la consulta o cómo le asignas datos?
Saludos...:)

Al González 26-02-2010 18:50:23

¿Podrías poner el mensaje de error real y completo? (presiona Ctrl+C cuando aparezca la ventana de excepción) Y de paso, algo más de tu código.

Gracias. :)

JerS 26-02-2010 19:34:49

Cita:

Empezado por rgstuamigo (Mensaje 355207)
* Estas trabajando con MySQL?:confused:
* Las variables cedula y fechaServerL ¿qué contienen antes de la consulta o cómo le asignas datos?
Saludos...:)

amigo las variables cedula es de tipo string algo como "V123456" , la variable fechaServerL es de timo Date y trae una fecha en el formato yyyy/mm/dd

y si efectivamente estoy utilizando Mysql version 4.1

JerS 26-02-2010 20:00:05

Cita:

Empezado por Al González (Mensaje 355230)
¿Podrías poner el mensaje de error real y completo? (presiona Ctrl+C cuando aparezca la ventana de excepción) Y de paso, algo más de tu código.

Gracias. :)


amigo al presionar Ctrl+C que tipo de mensaje debe aparecer?? algo mas especifico?? de verdad no sabia esta opcion

AzidRain 26-02-2010 20:02:41

Te quedaría mejor y menos problemático asi
Código Delphi [-]
With ZQuery1 Do
Begin
   Close;  
  SQL.Clear;  
  SQL.Add('Select acceso from permisos  join detallepermisos on (detallepermisos.codigo=permisos.codigo) where cedula=:cedula and fecha=:fecha');
  ParamByName('cedula').AsString := cedula;
  ParamByName('fecha').AsDateTime := fechaServerL;
  Open;     

  If RecordCount>0 Then 
  Begin
    // Hacemos lo que proceda si se encontraron registros
  end;

Como ves utilizamos parámetros para no tener que estar haciendo conversiones ni nada, Zeos las hace por nosotros. Al meter el parámetro en el SQL del TZQuery ( en este caso :fecha y :cedula), el componente automáticamente crea los parámetros y podemos acceder a ellos usando ParamByName(nombre_parametro) y según el tipo de datos que vayamos a meter usar AsInteger, AsString, AsDateTime, etc. Por último mediante Recordcount podemo saber cuantos registros arroja el query, obviamente si es 0 es que no hubo nada.

Pruébalo y nos comentas si te funciona. Otra cosa que puede suceder es que en alguna parte del código liberes el ZQuery1 y cuando lo vuelves a tratar de utilizar ya no existe y por eso te manda el error.

JerS 27-02-2010 04:18:55

Cita:

Empezado por AzidRain (Mensaje 355246)
Te quedaría mejor y menos problemático asi
Código Delphi [-]With ZQuery1 Do Begin Close; SQL.Clear; SQL.Add('Select acceso from permisos join detallepermisos on (detallepermisos.codigo=permisos.codigo) where cedula=:cedula and fecha=:fecha'); ParamByName('cedula').AsString := cedula; ParamByName('fecha').AsDateTime := fechaServerL; Open; If RecordCount>0 Then Begin // Hacemos lo que proceda si se encontraron registros end;


Como ves utilizamos parámetros para no tener que estar haciendo conversiones ni nada, Zeos las hace por nosotros. Al meter el parámetro en el SQL del TZQuery ( en este caso :fecha y :cedula), el componente automáticamente crea los parámetros y podemos acceder a ellos usando ParamByName(nombre_parametro) y según el tipo de datos que vayamos a meter usar AsInteger, AsString, AsDateTime, etc. Por último mediante Recordcount podemo saber cuantos registros arroja el query, obviamente si es 0 es que no hubo nada.

Pruébalo y nos comentas si te funciona. Otra cosa que puede suceder es que en alguna parte del código liberes el ZQuery1 y cuando lo vuelves a tratar de utilizar ya no existe y por eso te manda el error.

Gracias mi pana, voy hacer las pruebas y te estoy avisando!!

Al González 27-02-2010 04:34:47

Cita:

Empezado por JerS (Mensaje 355244)
amigo al presionar Ctrl+C que tipo de mensaje debe aparecer?? algo mas especifico?? de verdad no sabia esta opcion

Cuando te aparezca una ventana de error, más concretamente un mensaje de excepción, podrás presionar la combinación de teclas Ctrl+C para copiar esa información al portapapeles, y luego podrás pegarla aquí con la combinación de teclas Ctrl+V.

De esa manera nos mostrarás el mensaje de error íntegro. :)


La franja horaria es GMT +2. Ahora son las 03:09:13.

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