Gravar Imagem em Campo Blob utilizando ClientDataSet - Delphi 2010

Delphi

29/07/2014

Bom dia galera!

Estou utilizando Delphi 2010 + ClientDataSet + Oracle 11g.

Tenho um clientdataset com um campo Blob para gravar fotos.

Antes quando eu utilizava o Delphi 7, eu usava da seguinte forma:

OpenPictureDialog1.FileName := '';
OpenPictureDialog1.InitialDir := '\\DADOS\LOGOMARCAS';
OpenPictureDialog1.Execute;

try
if OpenPictureDialog1.FileName > '' then
CdsEmpresaLOGO.LoadFromFile(OpenPictureDialog1.FileName)
else
CdsEmpresaLOGO.Clear;
except
CdsEmpresaLOGO.Clear;
dmConexao.msg.MessageBox('Não foi possível carregar a imagem!','ATENÇÃO',MB_OK+MB_ICONERROR);
end;

funcionava perfeitamente, agora com a mudança a partir da versão do Delphi 2010 para trabalhar com Unicode em campos Blob, esse procedimento acima não funciona mais.

Gostaria de saber se alguém sabe como resolver o problema, pois não encontrei nenhuma solução na Net.

Obrigado!
Arthur Reis

Arthur Reis

Curtidas 0

Respostas

Itamar Souza

Itamar Souza

29/07/2014

Bom dia
Você precisa mesmo gravar as imagens no banco? Você poderia gravar o caminho da imagem ou o nome da imagem fazendo uma copia da imagem no momento da gravação para uma pasta especifica. Adicionar imagens em um banco de dados não é a melhor opção.

Faz um teste, veja o que lhe retorna.

 if OpenDialog1.Execute then
    ShowMessage(OpenDialog1.FileName);
    try
      if OpenDialog1.FileName <> '' then
         CdsEmpresaLOGO.LoadFromFile(OpenDialog1.FileName)
    else
         CdsEmpresaLOGO.Clear;
    except
         CdsEmpresaLOGO.Clear;
         dmConexao.msg.MessageBox('Não foi possível carregar a imagem!','ATENÇÃO',MB_OK+MB_ICONERROR);
    end;

GOSTEI 0
Arthur Reis

Arthur Reis

29/07/2014

Bom dia Itamar!

Realmente seria mais fácil gravar apenas o caminho da imagem e deixá-la por exemplo em uma pasta compartilhada no servidor, mas neste caso eu preciso realmente salvar a imagem diretamente no banco de dados.

De toda forma, obrigado pela ajuda.

Abraço!
GOSTEI 0
Eduardo Flaeschen

Eduardo Flaeschen

29/07/2014

Olá Arthur, não sei se já consegui o que queria, mas segue abai como eu faço:

Image2 é um TImage com a figura que desejo salvar !

procedure TForm1.Button1Click(Sender: TObject);
var
BS : TMemoryStream;

begin

BS := TMemoryStream.Create;
Image2.Picture.SaveToStream(BS);

with ConexaoBanco.cADOQry do
begin
Close;
SQL.Text := ' Insert into Imagens'+
' (Descricao, Imagem)'+
' Values '+
' (:Descricao, :Imagem)';

Parameters.ParamByName('Descricao').Value := 'Teste';
Parameters.ParamByName('Imagem').LoadFromStream(BS,ftGraphic);

try
if Connection.InTransaction then Connection.CommitTrans;
Connection.BeginTrans;
ExecSQL;
Connection.CommitTrans;
except
on E: exception do
begin
Application.MessageBox(PChar('Problemas na criação da tabela de Imagens.'+#10+E.message),'Atenção',mb_Ok+mb_DefButton1+mb_iconStop);
end;
end;
end;
end;

Abraços e boa sorte.
GOSTEI 0
POSTAR