PDA

Ver la Versión Completa : fallo select con zquery


rivercar
03-04-2008, 12:35:20
Hola,

tengo un problema con una consulta, uso la librería Zeos para conectarme a una BD postgres y el componente ZQuery para realizar consultas.
El problema viene cuando consulto tablas con datos de tipo TMemo como por ejemplo pg_description me da un error y no se que hacer ya.
No se si puede ser por las librerías dinámicas o porque?

A ver si alguien puede echarme una mano.
Gracias

Lepe
03-04-2008, 14:28:51
Te recomiendo leas la guía de estilo, así sabrás por qué te sugiero su lectura.

Saludos

ContraVeneno
03-04-2008, 17:03:58
cuando digas que error te marca, la gente empezará a ayudarte.

rivercar
03-04-2008, 17:28:58
Buenas,

el fallo que me da es en tiempo de ejecución, y es el siguiente:

"Access violation at address 00000000. Read of address 00000000."

lo cual no creo que sirva de mucho. He puesto un ZSQLMonitor para ver si la consulta que se envia al servidor es la correcta y si lo es. Esta es la sentencia que le está enviando al servidor de BD cuando produjo el error:

2008-04-03 17:23:45 cat: Execute, proto: postgresql-8, msg: SELECT * FROM pg_description WHERE objoid = 32859 AND objsubid = 0

y si la ejecuto desde el phpPgAdmin de postgres si me da el resultado esperado.

A ver si os sirve de algo.

AzidRain
03-04-2008, 21:05:12
el error de access violation por lo regular es un objeto que estás tratando de usar pero que aún no has instaciado:


var MiObj: TZQuery;

Begin
MiObj.Open; // Esto produce el error que mencionas porque MiObj no ha sido instanciado
end;

MiObj := TZQuery.Create(nil);

MiObj.Open; //Ahora si, no se genera el error porque ya está instanciado.


Revisa los objetos que utilizas, seguramente es después de abrir la tabla.

ContraVeneno
04-04-2008, 00:15:02
¿instaciado?

¿no querrás decir "creado"?

rivercar
04-04-2008, 13:00:00
Hola AzidRain,

ya tenia creado el ZQuery con el método Create como tú dices, creo que ese no es el motivo porque sino fallaria al hacer un select de cualquier otra tabla también y eso no pasa.

Si yo lanzo el select que puse antes:

SELECT * FROM pg_description WHERE objoid = 32859 AND objsubid = 0

si en lugar de select * hago un select de todos los campos de la tabla pg_description quitando el campo description(que es de tipo TMemo y contiene el comentario asociado al objeto de la BD con oid = 32859) entonces no falla. De todas formas, gracias por tu respuesta.

saludos

AzidRain
04-04-2008, 17:12:13
No conozco posgress pero no se si el campo sea efectivamente TMemo. Al menos en MySQL que es lo que conozco bien, los cambos para esos casos son BLOB. No tienes enlazado el resultado del query con un TDBMemoEdit? Probablemente definiste los campos manualmente en el query via click derecho-insertar campos.

rivercar
17-04-2008, 16:09:41
Hola,

Ya solucioné el error, al final eran las librerías dll, aunque bajándome la última versión de libpq.dll y sustituyéndola por la que yo usaba tampoco funcionaba, me decía que no encontraba ninguna librería.

Tuve que usar pgeDriver que te instala las librerías automáticamente y las añade al path de Delphi y ya funciona bien.

Lo comento por si a alguien le pasa lo mismo.

Saludos