Sql veri tabanına foto kaydetme ve okuma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kyilmaz46
Üye
Mesajlar: 16
Kayıt: 15 May 2005 12:09

Sql veri tabanına foto kaydetme ve okuma

Mesaj gönderen kyilmaz46 »

Sql 2000 veri tabanı kullanıyorum. Adoquerey ve adoconnection ile veri tabanına bağlanıyorum. personel programı hazırlıyorum.Adoquerinin SQL string list editorüne select * from personel yazmak suretiyle tüm kayıtları veri tabanından çekiyorum . ancak veri tabanına fotoları kaydettiğim için ağ üzerinde program çok ağır çalışmaya başladı. where ile ilgili personelin kayıtlarını çekip görüntülereme yada kaydetme yapmak istiyorum. daha önce dbedit yada dbcombobox lar ile bağlantı yaptım. Adoquery ve dataset ile bağlantıları yaptım. fotograflarıda dbimage ile kaydettim.
1- bağlantıları dbedit yerine edit kullanarak mı yapmam gerekiyor. Eğer böyle yapacaksam nasıl yapmam gerektiği konusunda detaylı anlatım yapabilirmisiniz.
2- fotografları dbimage olmadan ve adoqueriye çekmeden nasıl okutabilirim. yada kaydedebilirim.
formda aradım ancak yeterli bilgiyi tam bulamadım. Lütfen yardımcı olursanız çok memnun olacağım. Teşekkkürler....
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba

arama sonucunda bircok sonuc dondu bazıları:

viewtopic.php?t=8610&highlight=resim+kaydetme
viewtopic.php?t=8692&highlight=resim+kaydetme
viewtopic.php?t=17038&highlight=resim+kaydetme

vt ye resimlerin yolunu yazıp gosterebilirsin veya ayrı bir tabloda tutabilir master/detail ilişki ile gosterebilirsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
kyilmaz46
Üye
Mesajlar: 16
Kayıt: 15 May 2005 12:09

cevap

Mesaj gönderen kyilmaz46 »

bobasturk kardeş ilgin için çok teşeklürler...
ancak ben fotoları veri tabanına kaydediyorum. formda araştırma yaptım aşağıda ki kodları buldum ve SQL veri tabanındaki fotografları aşagıdaki kod ile okuttum

Kod: Tümünü seç

if not Dm.TEvsaf.FieldByName('foto').Isnull then
        begin
          Image1.Visible:=True;
          blobalan:=TADOBlobStream.Create(TGraphicField(Dm.TEvsaf.FieldByName('foto')), bmread);
          jpgresim:=tjpegimage.create;
          jpgresim.LoadFromStream(blobalan);
          Image1.Picture.Assign(jpgresim);
          jpgresim.free;
          blobalan.free;
        end;
aşağıdaki kod ile de veri tabanına fotograf kaydetmek istedim ancak fotografı veri tabanına kaydetmiyor. herhangi bir hata da vermedi hata nedere bulamadım.

Kod: Tümünü seç

If OpenPictureDialog1.Execute Then
        Begin
           If Not (Dm.TEvsaf.State in [DsInsert, DsEdit]) Then
                   Dm.TEvsaf.Edit;

                Image1.Visible:=True;
                jpgresim:=TJpegImage.Create;
                jpgresim.assign(Image1.Picture.Bitmap);
                hafiza:=TMemoryStream.Create;
                jpgresim.savetostream(hafiza);
                blobalan:=TADOBlobStream.Create(TGraphicField(Dm.TEvsaf.FieldByName('foto')), bmWrite);
                blobalan.copyfrom(hafiza,0);
                blobalan.free;
                hafiza.free;
                jpgresim.free;
                Dm.TEvsaf.post;

              
        end;
Ustalar yardımlarınızı bekliyorum.
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Sanırım eklemeniz gereken iki şey var:
1.

Kod: Tümünü seç

jpgresim.savetostream(hafiza);
Bu satırdan sonra

Kod: Tümünü seç

hafiza.position := 0;
yazmanız gerekiyor.

2. Bundan pek emin değilim, ama CopyFrom metodunun ikinci parametresi kaç byte kopyalanacağını gösteriyor. Buraya 0 değil, hafiza.size yazmanız gerekiyor.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Yine bu forumdan bulduğum ve projemde kullandığım yöntemi yazmak istiyorum. Master/Detail ilişki ile fotoğrafları gösteriyorum ana tablo formu üzerinde;

Kod: Tümünü seç

procedure TFrmMedyaKartAc.AdvToolButton1Click(Sender: TObject);
var 
 yol:AnsiString; 
begin 
  OpenPictureDialog1.Title:='Resim Seç';
  OpenPictureDialog1.Filter:='JPEG Dosyalari|*.jpg|ico Dosyalari|*.ico|Bmp Dosyalari|*.bmp'; 
  if OpenPictureDialog1.Execute Then 
    begin 
     yol:=OpenPictureDialog1.FileName;
     verigirisdm.MedyaresimIBDSet.Edit;//değişme moduna al
     JvDBImage1.Picture.LoadFromFile(yol);
  end;
end;

procedure TFrmMedyaKartAc.AdvToolButton10Click(Sender: TObject);
var 
  deg:integer;
  begin
    deg:=Application.MessageBox('Kaydetmek İstiyor musunuz?','Kaydet',MB_YesNO);
  if deg=mrYes Then
  begin
  if verigirisdm.MedyaresimIBDSet.State in [dsInsert, dsEdit] then
    verigirisdm.MedyaresimIBDSet.Post;
    ShowMessage('Resim Kaydedildi');
  end
  else
    ShowMessage('Resim Kayıt İşlemi İptal Edildi');
end;

procedure TFrmMedyaKartAc.AdvToolButton2Click(Sender: TObject);
begin
  if application.MessageBox('Resim Silinecek. Devam Edilsin mi?',
                            'Silme Onayı',mb_yesno+mb_iconwarning)=idyes then
  begin
    verigirisdm.MedyaresimIBDSet.delete;
    application.MessageBox('Resim Veri Tabanından Silindi',
                           'Silme İşlemi',mb_ok+mb_iconinformation);
  end
  else
  begin
    abort;
    application.MessageBox('Resim Silme İşlemi İptal Edildi',
                           'Silme İşlemi',mb_ok+mb_iconinformation);
  end;
end;
benimkisi lafazanlık ve ukalalık ama belki fikir verir diye yazmak istedim
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

databasede fotoların kendisini değilde nerede bulunduğunun yolunu tutmanız daha mantıklı olur. Forumda aratırsanız bulursunuz
Cevapla