PDA

Ver la Versión Completa : Large Objects en PostgreSQL


gatosoft
28-05-2004, 17:17:52
:D
Bueno, antes que nada, me disculpo si este no es el lugar apropiado para poner un Hilo sobre PostgreSQL, pero decidi ponerlo aqui por ser MySQL el hermano gemelo de PostgreSQL.

Me gustaria saber como puedo insertar en una tabla un campo de texto grande (Large Object o BLOB).

En la documentación de postgreSQL encuentro:
----------------------------------------------------------
CREATE TABLE image (
name text,
raster oid
);

INSERT INTO image (name, raster)
VALUES ('beautiful image', lo_import('/etc/motd'));

SELECT lo_export(image.raster, '/tmp/motd') FROM image
WHERE name = 'beautiful image';

--------------------------------------------------------------------------------

:confused:
No tengo problemas haciendo un select, pues una vez en la base de datos, se puede manipualr bien el OID, sin embargo para insertar un campo tengo dificultades por que el servidor es linux y los clientes trabajan en Windows. no puedo hacer el lo_import, mientras los datos esten en el cliente.


:p
Intente probando un TDBDEMO y me funciono, porque el usuario entra el texto en el componente y al darle post, lo guarda en el servidor.


:(
Pero ...¿si no quiero utilizar el TDBDEMO sino enviar el texto como un parametro de la consulta?


Para eso hice algo parcedio a esto:

zQuery1.close;
zQuery1.sql:text:='Insert into tabla (campo1, campo2, campo3) values (valor_campo1, valor_campo2, :parametro_blob)';
zQuery1.parambyname('parametro_blob').asblob:=Texto_grande;
zQyuery1.ExecSql;

Pero me sale un "parse error", y me muestra el texto que se envio como parametro. por ejemplo si el texto contien: "Las rosas son muy bonitas", el error que me sale es:

Parse error near 'las rosas son muy bonitas'

:D
Pense en mis amigos que trabajan en Visual Basic y de inmediato pensé en una chapuza: crear u ocultar un TDBMemo y utilizarlo como puente cada vez que vaya a insertar un Large object.... pero como dije... fué inspirado en mis compañeros programadores de visual basic.
:mad:

Les agradezco si me pueden orientar

gatosoft
28-05-2004, 21:32:35
Bueno, creo que ya resolvi el problema....

Sucede que al hacer el insert no hay forma de decirle al query que lo que le voy a pasar es un OID... (eso es lo que creo). Entonces hago lo sigiente:

zQuery.sql.text:='Select * from tabla
where condicion_que_no trae_registros';
zQuery.Open;

Esto trae la estructura de la tabla y ahora hago:

zQuery.Append;
zquery.fiedlbyname('Campo_OID').asString:=Texto_Largo;
{...}
zQuery.post;


Saludos.