PDA

Ver la Versión Completa : error: debe ser superusuario para utilizar lo import() en el extremo del servidor


thelibmx
15-01-2008, 19:17:20
Hola amigos estoy tratando de subir un archivo atravez de delphi2006 a una base de datos en postgre, la tabla se llama mis imagenes y tiene un campo llamado title(text) y otro picture(oid) se supone que en teoria pueden impotarse cualquier tipo de archivo pero me aparece el siguiente mensaje de error


General SQL error.
Error while executing the query;
Error: debe ser superusuario para utilizar lo import() en el extremo del servidor
Hint:
Todos los usuarios pueden utilizar lo_import() de cliente proporcionada por libpq.


El codigo que ocupo es este:


Querygestion.Close;
Querygestion.SQL.Clear;
Querygestion.SQL.add('INSERT INTO misimagenes(title, picture) VALUES ('+Edit1.Text+', lo_import(''c:/algo.pdf''))');
querygestion.ExecSQL;
Querygestion.Open;


Alguna pista?

gatosoft
23-01-2008, 03:13:05
hola thelibmx,

Bueno creo que el problema es donde se ejecuta la función lo_import.

Creo que estas intentando cargar un archivo que tienes en un cliente Windows con una sentencia SQL que se ejecuta en el servidor... (generalmente el servidor es Linux)...

Lo anterior quiere decir que debes mover primero el archivo a un directorio en el servidor para guardarlo.... :(

Creo que podrías hacer una "triquiñuela", utilizando un componente de Delphi intermedio que cargue imágenes a una BD, algo así como un TDBImage (Invisible), que apunte hacia el campo que quieres dentro de tu BD.

Yo una vez lo hice así para subir texto a un campo definido como oid.

espero que te sirva... si no es muy tarde.

thelibmx
23-01-2008, 06:45:11
gracias, creo que si fue un poco tarde pues ya cambiamos la manera en q subimos los datos, se cambio el esquema a subir los archivos directamente al servidor, sabes necesitaba subir toda clase de archivos :( pero como no encontraba manera pues se tubo que cambiar, aun asi, creo que a muchos les sirvira de pista tu sugerencia, yo espero en un futuro encontrar alguna forma de hacerlo, y claro la posteare aqui :) de igual manera te agradezco y agradezco a todos los que apoyaron en este hilo, y pues los que sigan apoyando tambien un saludo y gracias :D

gatosoft
11-09-2008, 19:19:49
mmmm creo que alguien borro la respuesta en chino que habian peusto... por lo que esta respuesta pierde validez....

cascarrabias
22-12-2008, 11:55:42
Lo que yo te recomiendo en estos casos es que el campo en Postgre sea tipo 'BLOB' y que cargues tu archivo a un stream en tu aplicacion y lo pases de la siguiente manera:



with zQuery1 do begin
SQL.Add('INSERT INTO misimagenes("title","picture") VALUES('''+Edit1.text+''',:ARCHIVO);');
ParamByName('ARCHIVO').LoadFromStream(stream,ftBlob);
ZQuery1.ExecSQL;
end;



Salu2

burgosrodas
18-02-2011, 07:22:49
Lo que yo te recomiendo en estos casos es que el campo en Postgre sea tipo 'BLOB'

Great !!!!

esa es la solucion, solo cabe anotar que en postgres el campo Blob es conocido como BYTEA (bueno para los que están perdidos en el mundo Postgres como alguna vez lo estuve)



procedure TForm1.FormCreate(Sender: TObject);
var
stream:TMemoryStream;
begin
if fileexists('C:\Archivo.dat') then
begin
try
stream:=TMemoryStream.Create;

stream.LoadFromFile('C:\Archivo.dat');

ZQuery1.SQL.Add('INSERT INTO temp(imagen) VALUES(:ARCHIVO);');
ZQuery1.ParamByName('ARCHIVO').LoadFromStream(stream,ftBlob);
ZQuery1.ExecSQL;

finally

stream.Free;
end;

end;
end;



muchas gracias por el aporte cascarrabias