Fórum Erro ao gravar foto no banco #352925
02/02/2008
0
erro quando eu vou grava no banco: [color=red:6bc9555caf]Access violation at address 00000000, Read of address 00000000.[/color:6bc9555caf]
fiz um pequeno exemplo, se alguem tem alguma forma melhor de como gravar no banco eu agradeço!
procedure TForm1.btnGravarClick(Sender: TObject); begin // o erro está nesta linha abaixo. IBStoredProc1.ParamByName(´foto´).LoadFromStream(GravaFoto(pctImagem.FileName), ftBlob); IBStoredProc1.ExecProc; IBTransaction1.Commit; end; function TForm1.GravaFoto(FileName : string) : TMemoryStream; var Jpg : TJpegImage; Bitmap : TBitmap; MemoryStream : TMemoryStream; begin Jpg := TJpegImage.Create; MemoryStream := TMemoryStream.Create; Bitmap := TBitmap.Create; try if (AnsiUpperCase(ExtractFileExt(FileName)) = ´.BMP´) then begin Bitmap.LoadFromFile(FileName); Jpg.Assign(Bitmap); Jpg.Compress; end else Jpg.LoadFromFile(FileName); Jpg.SaveToStream(MemoryStream); Result := MemoryStream; finally MemoryStream.Free; Bitmap.Free; Jpg.Free; end; end;
vlw.
Pestana_
Curtir tópico
+ 0Posts
02/02/2008
Edilcimar
If Image1.Picture <> Nil then
FieldByName(´FOTO´).Assign(Image1.Picture.Graphic);
isto pode ser feito usando uma table, ibtable, query, etc
Gostei + 0
03/02/2008
Pestana_
Ola Edilcimar, obrigado por me ajudar, eu fiz desta maneira e aparece o seguinte erro: [color=rede:9c2d458712]Unsupported feature[/color:9c2d458712]
procedure TForm1.btnGravarClick(Sender: TObject); begin if imgFoto.Picture <> nil then IBStoredProc1.ParamByName(´foto´).Assign(imgFoto.Picture.Graphic); IBStoredProc1.ExecProc; IBTransaction1.Commit; end;
agradeço pela atenção,
Pestana.
Gostei + 0
04/02/2008
Edilcimar
Gostei + 0
04/02/2008
Pestana_
já tentei de várias formas, mas até agora não sei aonde estou errando.
Obrigado por estar me ajudando,
Pestana.
Gostei + 0
04/02/2008
Paullsoftware
Gostei + 0
04/02/2008
Pestana_
pode até ser, mas se eu armazenar o path no banco eu precisaria utilizar o compartilhamento da rede e eu não queria fazer isso.
vlw.
Gostei + 0
05/02/2008
Catunda
Para entender melhor eu utilizo um formfuncionarios no qual existe um DBImage para a foto. Clicando no DBImage abre-se um outro form (form1) onde localizo e seleciono a foto desejada, então é só clicar no BitBtn1 para jogar a foto no campo apropriado (foto) e no DBImage do formfuncionarios. Então o form1 é fechado e volto ao formfuncionarios onde já está apresentada a foto selecionada, mas que ainda não foi salva fisicamente pq isso só será feito se for clicar no botão adequado pra confirmar as alterações (no caso com o applyupdates).
procedure TForm1.BitBtn1Click(Sender: TObject);
var
vextensao: String;
Picture: TPicture;
aBmp: TBitmap;
begin
vextensao:=ExtractFileExt(FileListBox1.FileName);
Picture := graphics.TPicture.Create;
aBmp := TBitmap.Create;
Picture.LoadFromFile(FileListBox1.filename);
vextensao := ExtractFileExt(FileListBox1.Filename);
aBmp.Assign(Picture.Graphic);
FormFuncionarios.Cds1.ReadOnly:=false;
FormFuncionarios.DBImage1.picture.assign(aBmp);
FormFuncionarios.Cds1.Edit;
formfuncionarios.Cds1FOTO.Assign(aBmp);
Picture.Free;
aBmp.Free;
close;
end;
Gostei + 0
05/02/2008
Edilcimar
Image1.Picture.LoadFromFile(FileListBox1.FileName);
depois disto, para gravar a imagem em um banco firebird uso
If Image1.Picture <> Nil then
FieldByName(´FOTO´).Assign(Image1.Picture.Graphic);
Isto está funcionando perfeitamente
Gostei + 0
05/02/2008
Aroldo Zanela
A forma de menor esforço é usando o método LoadFromFile dos objetos TFields. Você pode armazenar qualquer ´coisa´ num campo blob (PDF, EXE, BMP, JPG, etc.) Para visualizar, procure pelo EDBImage aqui no fórum.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)