Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) gravar imagens no mysql


biakeffer

Pergunta

tipo... to com uma dúvida ao gravar imagem no banco de dados uso delphi e bd mysql

estou fazendo da seguinte maneira...

no botão pra procurar a foto coloquei

if OpenPictureDialog1.Execute then

FOTO.Picture.LoadFromFile(OpenPictureDialog1.FileName);

até aqui tudo bem, agora como faço pra gravar no banco qual o código coloco no botão de gravar

tentei colocar assim mas não deu certo:

DataModule1.Table1.FieldByName('foto').Assign(FOTO.Picture);

me ajudem por favor!!!!!!!

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

to com uma dúvida ao gravar imagem no banco de dados uso delphi e bd mysql

procure por Dicas [ Imagens no MySQL . Função AddSlashes ]

Um dos grandes problemas de se trabalhar armazenando imagens em campos blobs no MySQL é ler estes campos posteriormente para gravar esta imagem em um arquivo (bmp, jpg, gif, etc)....

http://www.activedelphi.com.br/lista_topic...1&tópico=48

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
estou fazendo da seguinte maneira...

no botão pra procurar a foto coloquei

if OpenPictureDialog1.Execute then
  FOTO.Picture.LoadFromFile(OpenPictureDialog1.FileName);
até aqui tudo bem, agora como faço pra gravar no banco qual o código coloco no botão de gravar tentei colocar assim mas não deu certo: DataModule1.Table1.FieldByName('foto').Assign(FOTO.Picture);
biakeffer, se esta foto diz respeito ao registro correntemente em inserção/edição você poderia substituir o seu TImage (FOTO) por um TDBImage. Nele, configure as propriedades DataSource e DataField de acordo com o que você tem no datamodule. Como resultado, este componente sempre mostrará a foto gravada no banco para o registro atual. Mas se for para manter com um TImage, a saída talvez seja algo assim:
var
  MS :TMemoryStream;
begin
  ...
  if OpenPictureDialog1.Execute then
  begin
    FOTO.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    MS := TMemoryStream.Create;
    try
      FOTO.Picture.Graphic.SaveToStream(MS);
      (DataModule1.Table1.FieldByName('foto') as TBlobField).LoadFromStream(MS);
    finally
      MS.Free;
    end;
  end;
end;

note que seu campo de imagem deverá ser do tipo BLOB (TBlobField).

Conforme o tamanho da imagem que você pretenda armazenar, pode ser útil avaliar o tipo de campo BLOB a utilizar - post

Se precisar converter as imagens para JPG (caso não sejam), tem uma função que postei há algum tempo - post.

Editado por Micheus
Adicionado MS.Free
Link para o comentário
Compartilhar em outros sites

  • 0

procure por Dicas [ Imagens no MySQL . Função AddSlashes ]

foi mal, não é para delphi

..........................................................

note que seu campo de imagem deverá ser do tipo BLOB (TBlobField).

aproveitando o que o Micheus já te respondeu, vamos supor que o campo definido na sua tabela seja do tipo TBlob e este linkado ao componente TDBImage, então podemos fazer o seguinte teste:

// Para salvar a imagem

DataModule1.Table1.Edit;
DataModule1.Table1.FieldByName('foto').LoadfromFile('C:\Imagem.jpg'); // o nome foto é minusculo ?
DataModule1.Table1.Post;

OBS: o codigo que o Micheus postou para voce tambem funciona...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

oi pessoas...seguinte, como eu não consegui resolver meu problema optei por gravar apenas o caminho da imagem, mas dai surgiu outro problema...no mysql não da pra gravar \ (barra invertida), eu consegui gravar o caminho porém fica da seguinte maneira... C:imagem.jpg sendo que deveria ficar C:\imagem.jpg...

alguém ai pode me ajudar a resolver esse probleminha???

Link para o comentário
Compartilhar em outros sites

  • 0
Citar
surgiu outro problema...no mysql não da pra gravar \ (barra invertida)

você pode criar uma rotina para trocar esta barra por branco ou outro caracter

e armazenar no banco, e quando você for utilizar trocar o branco por barra novamente.

exemplo:

 

procedure TForm1.Button1Click(Sender: TObject);
var path : string;
begin
   path:= 'c:/imagens/jpg/teste.jpg';

   while Pos('/', path) > 0 do
      path[Pos('/', path)] := ' ';

   edit1.text := path;  //  o resultado será 'c: imagens jpg teste.jpg'

   while Pos(' ', path) > 0 do
      path[Pos(' ', path)] := '/';  

   edit2.text := path;   // o resultado será 'c:/imagens/jpg/teste.jpg'
end;

 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
oi pessoas...seguinte, como eu não consegui resolver meu problema optei por gravar apenas o caminho da imagem, mas dai surgiu outro problema...no mysql não da pra gravar \ (barra invertida), eu consegui gravar o caminho porém fica da seguinte maneira... C:imagem.jpg sendo que deveria ficar C:\imagem.jpg...

alguém ai pode me ajudar a resolver esse probleminha???

MySQL foi escrito em C em ambiente originalmente Linux/Unix . Então segue as regras para caracteres especiais. Onde se quer usar \ deve-se usar \\. Simples Assim.

Link para o comentário
Compartilhar em outros sites

  • 0
Onde se quer usar \ deve-se usar \\. Simples Assim.
Simples mas bem sacana.

Por que é que os dados que são armazenados no banco, teriam alguma relação com a sintaxe da linguagem utilizada para criar ele? :wacko:

Lembre-se que a linguagem SQL é interpretada. :blush:

Manual do MySQL Versão 4.1 2.6.1.3. MySQL para Windows Comparado com o MySQL para

Unix

O caracter de diretório ‘\’

Componentes de nomes de caminho no Win95 são separados pelo caracter ‘\’ o qual também é

o caractere de escape no MySQL. Se você estiver usando LOAD DATA INFILE ou SELECT

... INTO OUTFILE, use nomes de arquivo no estilo Unix com caracteres ‘/’:

mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr;

mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;

Uma alternativa é dobrar o caracter ‘/’:

mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;

mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...