resim kaydetme, hata nerede bulamıyorum.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen y.kulac »

s.a.
arama yaptım ve tabloya resim kaydetme ile ilgili dökümanları okudum.
uygulama yaptım ama resmi bir türlü tabloya kaydedemedim. paradox vt kullanıyorum.
Resim diye bir alan var binarry tipinde.

aşağıdaki kodu yazdım ama bir türlü resmi kaydedemedim.
acaba nerde hata yapıyorum.

Kod: Tümünü seç

procedure TfrmKayit.DBImage1DblClick(Sender: TObject);
var
  jpgresim: Tjpegimage;
  blobalan: Tblobstream;
  hafiza: Tmemorystream;
begin
OpenPictureDialog1.Execute ;
Dbimage1.picture.loadfromfile(openpicturedialog1.filename);

    with Table1 do
    begin
    edit;
      FieldValues['AdiSoyadi']:=Dbedit1.text;
      jpgresim:=TJpegImage.Create; 
      jpgresim.assign(DbImage1.Picture.Bitmap); 
      hafiza:=TMemoryStream.Create; 
      jpgresim.savetostream(hafiza); 
      blobalan:=TBlobStream.Create(TGraphicField(FieldByName('resim')), bmWrite);
      blobalan.copyfrom(hafiza,0); 
      blobalan.free; 
      hafiza.free; 
      jpgresim.free; 
      post;
      end;  
end;
// daha okunaklı olabilmesi için [ code] [ /code] tagları arasına alındı .rsimsek


yardım edebilir misiniz? iyi çalışmalar.
Misafir

Mesaj gönderen Misafir »

merhaba.
kaydetmeye çalıştığınız resmin formatı nedir?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

post işlemini free lerden önce yap.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

bundan sonra codları dediğiniz formatta yazmaya özen gösterim.
resim jpeg formatında.
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

sayın rsimsek bey

post işlemini dediğin gibi free lerden önce yaptım

hata mesajı verdi şöyle:
bolob not opened.
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

şu an yaptığıöm programda kullanıyorum bir dene
uses bölümüne jpeg ekle

Kod: Tümünü seç

var
  Form1: TForm1;
    BmpResmi : TBitMap;
  JpgResmi :  TJPEGImage;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if DataModule2.ibQuery1.State in [dsedit,dsinsert] then
 begin

OpenPictureDialog1.Title := 'Eklenecek Resmi Seçin';
OpenPictureDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if(OpenPictureDialog1.Execute() ) then
begin
   BmpResmi := TBitMap.Create;
   JpgResmi := TJPEGImage.Create;
   try
    BmpResmi.LoadFromFile(OpenPictureDialog1.FileName);
   except
     JpgResmi.LoadFromFile(OpenPictureDialog1.FileName);
     BmpResmi.Assign(JpgResmi);
     end;
    DBImage1.Picture.Assign(BmpResmi);
    BmpResmi.Free;
    JpgResmi.Free;

end; end
else
begin
  DataModule2.ibQuery1.Edit;
OpenPictureDialog1.Title := 'Eklenecek Resmi Seçin';
OpenPictureDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if(OpenPictureDialog1.Execute() ) then
begin
   BmpResmi := TBitMap.Create;
   JpgResmi := TJPEGImage.Create;
   try
    BmpResmi.LoadFromFile(OpenPictureDialog1.FileName);
   except
     JpgResmi.LoadFromFile(OpenPictureDialog1.FileName);
     BmpResmi.Assign(JpgResmi);
     end;
    DBImage1.Picture.Assign(BmpResmi);
    BmpResmi.Free;
    JpgResmi.Free;
 DataModule2.ibQuery1.Post;

END;     END;END;
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

sayın faosoft

verdiğiniz kodları uyguladım. "bmp is not valid" diye hata alıyorum.
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

bmp ve jpg dışındaki resim formatlarında deneme. exe yi delphi dışında çalıştırırsan hata vermez hata verirse maalesef beni aşar :oops: bende çalışıyor
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Kod: Tümünü seç

function JpgDeg : TBitmap;
begin
 result := TBitmap.Create;
 result.Width  := Image1.Width;
 Result.Height := Image1.Height;
 result.Canvas.Draw(0, 0, Image1.Picture.Graphic);
end;
şeklinde bir çevrim ile kayıt edebilirsin.

Kolay gelsin...
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re:

Mesaj gönderen smokie »

Fatih! yazdı:şu an yaptığıöm programda kullanıyorum bir dene
uses bölümüne jpeg ekle

Kod: Tümünü seç

var
  Form1: TForm1;
    BmpResmi : TBitMap;
  JpgResmi :  TJPEGImage;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if DataModule2.ibQuery1.State in [dsedit,dsinsert] then
 begin

OpenPictureDialog1.Title := 'Eklenecek Resmi Seçin';
OpenPictureDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if(OpenPictureDialog1.Execute() ) then
begin
   BmpResmi := TBitMap.Create;
   JpgResmi := TJPEGImage.Create;
   try
    BmpResmi.LoadFromFile(OpenPictureDialog1.FileName);
   except
     JpgResmi.LoadFromFile(OpenPictureDialog1.FileName);
     BmpResmi.Assign(JpgResmi);
     end;
    DBImage1.Picture.Assign(BmpResmi);
    BmpResmi.Free;
    JpgResmi.Free;

end; end
else
begin
  DataModule2.ibQuery1.Edit;
OpenPictureDialog1.Title := 'Eklenecek Resmi Seçin';
OpenPictureDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if(OpenPictureDialog1.Execute() ) then
begin
   BmpResmi := TBitMap.Create;
   JpgResmi := TJPEGImage.Create;
   try
    BmpResmi.LoadFromFile(OpenPictureDialog1.FileName);
   except
     JpgResmi.LoadFromFile(OpenPictureDialog1.FileName);
     BmpResmi.Assign(JpgResmi);
     end;
    DBImage1.Picture.Assign(BmpResmi);
    BmpResmi.Free;
    JpgResmi.Free;
 DataModule2.ibQuery1.Post;

END;     END;END;

merb,
hata veriyor yardımcı olurmusunuz.
IBquery, FB 2.5 Delphi 7 kullanıyorum,
connot perform this operation on a closed dataset hatası alıyorum.
nerde hata yapıyorum
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen conari »

ilgili tablo edit modda değil. kendi kodlarınızı kontrol edin veya burada yayınlayın.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

Kod: Tümünü seç

var
  aMS: TMemoryStream;
begin
  OpenPictureDialog1.Title := 'Eklenecek Resmi Seçin';
  OpenPictureDialog1.InitialDir := ExtractFilePath(Application.ExeName);

  if(OpenPictureDialog1.Execute() ) then              
    begin
      if not (Image1.Picture.Graphic is TJPEGImage) then
        Image1.Picture.Graphic := TJPEGImage.Create;
        Image1.Picture.Graphic.LoadFromFile(OpenPictureDialog1.FileName);
        aMS := TMemoryStream.Create;
      try
        Image1.Picture.Graphic.SaveToStream(aMS);
        DM.IBDataSet1.Insert;
        aMS.Position := 0; 
        TBlobField(dm.IBDataSet1.FieldByName('MRES')).LoadFromStream(aMS);
        dm.IBDataSet1.Post;
      finally
       aMS.Free;
      end;
    end;
merhb,
Formda aramalarda bu şekilde sorunsuz oldu ama jpeg haric bir bir resim formayını kabul etmiyor. tek tek resim formatlı ile uğraşmaktansa pdf txt world excel gibi tüm dosyaları kaydetmek daha mantıklı olur diye düşündüm. formda böyle bir kod buldum.

Kod: Tümünü seç

var
blobalan:TADOBlobStream;
begin

dm.IBDataSet1.Edit;
blobalan:=TADOBlobStream.Create(TBlobField(dm.IBDataSet1.FieldByName('MRES')),bmwrite);
blobalan.LoadFromFile('C:\nereyekacnetle.pdf');
blobalan.Position:=0;
TBlobField(dm.IBDataSet1.FieldByName('MRES')).LoadFromStream(blobalan);
dm.IBDataSet1.Post;
     end;
Undeclared identifer TADOBlobStream hatası alıyorum. bunu Query ile yapma imkanı varmı.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen conari »

Sen IB kullanmışsın.
uses a ADODB Eklemelisin ve onu kullanmalısın.
IBde TIBBlobstream olmalı sanırım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen smokie »

yardımın için çok tşklr

Kod: Tümünü seç

var
blobalan:TBlobField;
begin

dm.IBDataSet1.Edit;
blobalan:=TBlobField.Create(TBlobField(dm.IBDataSet1.FieldByName('MRES')));
blobalan.LoadFromFile('C:\nereyekacnetle.pdf');
//blobalan.Position:=0;
TBlobField(dm.IBDataSet1.FieldByName('MRES')).LoadFromFile(blobalan);
dm.IBDataSet1.Post;
end;
bu şekilde denedim.
Incompatible types String and Tblobfield böyle bir hata veriyor.
tip uyumsuzlugu gibi bişey sanırım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: resim kaydetme, hata nerede bulamıyorum.

Mesaj gönderen conari »

IB de TIBBlobField olmalı IB de pek bilgim yok.

Kod: Tümünü seç

blob := yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_BLOB'), bmWrite);
try
  blob.Seek(0, soFromBeginning);

  fs := TFileStream.Create('c:\your_name.doc', fmOpenRead orfmShareDenyWrite);
  try
    blob.CopyFrom(fs, fs.Size)
  finally
    fs.Free
  end;
finally
  blob.Free
end;

To load from BLOB:

blob := yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_BLOB'), bmRead);
try
  blob.Seek(0, soFromBeginning);

  with TFileStream.Create('c:\your_name.doc', fmCreate) do
    try
      CopyFrom(blob, blob.Size)
    finally
      Free
    end;
finally
  blob.Free
end;
birde şu yöntem;

Kod: Tümünü seç

var
 fStream:TFileStream;   

 begin
  OpenDialog1.Filter:='All Files(*.*)|*.*';
  if OpenDialog1.Execute then
    fStream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
    ADOTable1.Insert;
     try
       TBlobField(ADOTable1.FieldByName('image')).LoadFromStream(fStream);
     finally
       fStream.Free;
    end;   
  ADOTable1.Post;
 end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla