Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

evaldobarbosa

Campos Blob/Large-object e Delphi

Recommended Posts

Estou usando delphi para acesso ao Postgresql e necessito da inserção de imagens em uma tabela do banco de dados.Atualmente, lendo na internet e fazendo testes no meu computador, tenho uma tabela com a seguinte estrutura:table=imagefields=[idimage=serial,name=varchar,raster=oid]Quanto tento inserir uma imagem no campo raster, que é um large object, eu recebo um erro que fala de um descriptor, do qual não encontro documentação. O erro tem a mensagem "Invalid large-object descriptor:0".Alguém tem a solução para isso? Preciso entregar um trabalho urgentemente e necessito disso para a conclusão.Desde já agradeço aos amigos do fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao para criar um campo imagem no BD ele pode ser do tipo oid..

 

create table qualquer_nome(

 

id integer not null primary key,

foto oid not null);

 

depois para armazenar o postgres usa uma função interna q eh a lo_import...

 

ae vai um exemplo usando conexao via ADO no delphi, mas axo q funciona pra BDE, etc...eh soh testa...

 

try

qryImagem.SQL.Text:= 'INSERT INTO IMAGEM(ID, FOTO) VALUES(NEXTVAL(''SID_IMAGEM''), LO_IMPORT(:CAMINHO))';

qryImagem.Parameters[0].Value:=caminho;

qryImagem.ExecSQL;

except

qualquer mensagem;

end;

 

o caminho eh uma variavel q recebe um path(caminho) da imagem q deseja inserir no BD, soh q para inserir o caminho você deve criar uma funcao q tire as barras invertidas(\) e coloque no lugar as barras normais(/), pq senao o postgres nao reconhece...e alem do q no banco nao vai ser salvo o caminho e sim a imagem msm, tanto q se você depois de inserir apagar a imagem do caminho e tentar recuperar pelo BD vai dar certo...e no view da table do BD q ta armazenado sua imagem, no campo foto q eh do tipo oid, vai aparecer um identificador, o banco mostra isso eh normal , mas por tras a imagem esta armazenada....

 

agora vai o esquema pra recuperar....

 

caminho:=ExtractFilePath(Application.ExeName) + 'Temp\temp.jpg';

qryLoc_Imagem2.close;

qryLoc_Imagem2.SQL.Text:='SELECT LO_EXPORT(FOTO,:CAMINHO) FROM IMAGEM WHERE ID=:ID';

qryLoc_Imagem2.Parameters[0].Value:=caminho;

qryLoc_Imagem2.Parameters[1].Value:=id;

qryLoc_Imagem2.Open;

 

bom novamente a variavel caminho eh de uma pasta temporaria q tem q se criar pq o BD exporta a imagem armazenada pra essa pasta como um arquivo, a funcao lo_export q faz isso e a variavel id eh pra identificar qual image quer recuperar...entao o campo foto q contem a imagem vai ser exportado atraves da lo_export para o caminho da pasta Temp q eu defini, pode ser qualquer pasta mas tem q definir a pasta e o nome do arquivo, q no meu caso eh temp.jpg, depois disso pelo delphi abre-se em tempo de execução msm a figura do arquivo pelo TImage usando o comando LoadFromFile.

 

bom axo q eh soh , qualquer duvida entre em contato...valew galera...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.