Como inserir/recuperar imagem no banco de dados MySQL – mysql delphi-xe8

Pergunta:


Gostaria se saber de uma forma clara e simples como inserir/recuperar imagem no banco de dados MySQL?

Estou usando o FireDac para fazer a conexão com o banco de dados MySQL.

Eu tenho uma imagem JPEG e quero guardá-la em um banco de dados MySQL e poder restaurá-la quando necessário. Pelo que pude observar é algo o tipo de dados blob, mas não sei a forma correta de se fazer.

Autor da pergunta Viniam

Resposta Comunidade:

Após uma conexão feita com o FireDac, você pode usar um de seus próprios componentes para executar os comandos SQLs.

O Componente esta na mesma aba do FireDacconnection, trata-se do FDQuery.

Gravando a imagem no Banco de Dados:

procedure frmTeste.btnIncluirFotoClick(Sender: TObject);
var
  vArquivo: TFileStream;
begin
  vArquivo := TFileStream.Create('d:1.bmp', fmOpenRead or fmShareDenyWrite);
  FDQuery1.Close;
  FDQuery1.SQL.Clear;
  //Pode ser feito Insert ou Update
  FDQuery1.SQL.Add('INSERT INTO tbl_usuario (FOTO) VALUES(:FOTOCARREGADA)');
  FDQuery1.Params[0].DataType := ftBlob;
  FDQuery1.ParamByName('FOTOCARREGADA').AsStream := vArquivo;
  FDQuery1.ExecSQL;
  FDQuery1.Close;
end;

Lendo a imagem do Banco de Dados:

procedure frmTeste.btnCarregarFotoClick(Sender: TObject);
var
  vFoto   : TStream;
  vImagem : TBitmap;
begin     
  FDQuery1.Close;
  FDQuery1.SQL.Add('SELECT * FROM tbl_usuario WHERE id_usuario = 6');
  FDQuery1.Open;

  //Lendo a imagem do campo BLOB para a Memória
  vFoto := FDQuery1.CreateBlobStream(FDQuery1.FieldByName('FOTO'), bmRead);

  //Criando a instância de TBitmap (pode ser JPG tb)
  vImagem := TBitmap.Create;

  //Carregando a imagem a partir do stream TStream
  vImagem.LoadFromStream(vFoto);

  //Exibindo a Imagem
  Image1.Picture.Assign(vImagem);
  //Image1.Bitmap.LoadFromStream(vFoto); //Caso esteja usando FMX ao invés de VCL
end;

Para ter um sucesso na gravação e leitura dos dados, a escolha do tipo do campo Blob deve ser levado em consideração!

Segue uma pergunta que fiz aqui mesmo com boas respostas sobre o campo BLOB

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *