Jump to content
Fórum Script Brasil
  • 0

(Resolvido) gravar imagens no mysql


biakeffer

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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.

Edited by Micheus
Adicionado MS.Free
Link to comment
Share on other sites

  • 0

oi Jhonas...dei uma olhada no que me passou, mas não consegui entender muito bem... tipo onde tenho que colocar essa função, onde chamar e tals...pode me dar uma mãozinha...é que to perdidinha mesmo quanto esse assunto de imagens no banco

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...