Fórum Gravar Imagem em Campo Blob utilizando ClientDataSet - Delphi 2010 #487172
29/07/2014
0
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
Curtir tópico
+ 0Posts
29/07/2014
Itamar Souza
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
29/07/2014
Arthur Reis
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
20/09/2017
Eduardo Flaeschen
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
Clique aqui para fazer login e interagir na Comunidade :)