Soru Veritabanındaki resmi tekrar Image nesnesine yükleme?

Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Merhaba arkadaşlar aşağıdaki kod ile resmi image nesnesine alıyorum.
Kod:
Private Sub btnGözat_Click()
'Personelimizin resmini seçiyoruz
    Dim dGözat As FileDialog
    Set dGözat = Application.FileDialog(msoFileDialogOpen)
    With dGözat
        .Title = "Resim Dosyası Seçiniz"
        With .Filters
            .Clear
            .Add "Tüm Resimler", "*.gif;*.jpg;*.bmp"
            .Add "Gif Resmi", "*.gif"
            .Add "JPG Resmi", "*.jpg"
            .Add "Bmp Resmi", "*.bmp"
            .Item 3
        End With
        .InitialFileName = UygulamaYolu
        If .Show Then
            ResimYolu = .SelectedItems(1)
            Image1.Picture = LoadPicture(ResimYolu)
            ResimEklendi = True
        Else
            ResimEklendi = False
        End If
    End With
End Sub
Bu kod ile veritabanında kayıt yapıyorum.
Kod:
Private Sub CommandButton1_Click() 'EKLE
Dim Resim() As Byte

If txtAdi.Text = "" Then
txtAdi.SetFocus
MsgBox ("Lütfen Adı - Soyad Bilgisi Girin..."), vbInformation, "Süleyman SAVAŞ"
Exit Sub
End If


Set baglan = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
Call BAGLANTI

  rs.Open "select * from [REHBER] where [TC_KIMLIK] = '" & txtTCKimlik & "'", baglan, 1, 3
  If rs.RecordCount = 0 Then
    rs.AddNew

rs("ADI_SOYADI") = txtAdi.Value
rs("TC_KIMLIK") = txtTCKimlik.Value
rs("IL") = cmbIL.Value
rs("ILCE") = cmbILCE.Value
rs("SICIL") = txtSicil.Value
rs("SINIF") = cmbSinif.Value
rs("UNVAN") = cmbUnvan.Value
rs("GOREV") = txtGorev.Value
rs("FIRMA") = txtFirma.Value
rs("KURUM") = cmbKurum.Value
rs("BASKANLIK") = cmbBaskanlik.Value
rs("BIRIM") = cmbBirim.Value
rs("ISTIHDAMI") = cmbistihdam.Value
rs("YERLESKESI") = cmbYerleske.Value
rs("KAT") = txtKat.Value
rs("ODA_NO") = txtOda.Value
rs("IS_TEL") = txtIstel.Value
rs("FAKS") = txtFaks.Value
rs("DAHILI") = txtDahili.Value
rs("CEP") = txtCeptel.Value
rs("E_POSTA") = txtEposta.Value
rs("ADRES") = txtAdres.Value
rs("VERGI_D") = txtVergiD.Value
rs("VERGI_N") = txtVergiN.Value
rs("NOT") = txtNot.Value
rs("RESIM") = Image1.Picture

'Image1.Picture = Nothing
   rs.Update

    MsgBox txtAdi & " adlı kayıt başarı ile tamamlandı.", , "Süleyman SAVAŞ"
    Else
    MsgBox txtTCKimlik & " T.C Kimlik numarasında mevcut bir kayıt var.!!", , "Süleyman SAVAŞ"
  End If
  rs.Close
  Set kayit = Nothing
  listeye_al
  temizle
End Sub
Veritabanına şu şekilde bir kayıt yapıyor.
mdb-resim.PNG

DblClick olayı ile verileri tekrar nesnelere yüklemek isteyince son satıdaki Picture kodunda hata veriyor.
Sorunu nasıl çözebilirim.
dblklick.PNG
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Image nesnesine yüklemek istediğiniz resmin dosya yolunun bilinmesi gerekir.

Daha sonra, sizin btnGözat_Click makrosunda olduğu gibi bu dosya yolunu kullanarak resmi Image nesnesine yükleyebilirsiniz.

Image1.Picture = LoadPicture(ResimYolu)

Buradan hareketle; sizin ListView nesnesinde Resim başlığı altındaki alanda personele ait resimlerin dosya yollarını depolamanız durumunda, sorun çözülür diye düşünüyorum.

Image1.Picture = LoadPicture(Listview1.Listitems(Y)..........subitems(26).text)

Bu yönde biraz kurcalayın bence....

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Yanlış anlamadıysam, resmi kaydetme metoduna bakılırsa veritabanına gömülü (binary data) olarak kaydetmeye çalışılıyormuş gibi görünüyor. Doğru mu @s.savas ? Doğruysa, alan'ın "OLE Nesnesi" olarak seçilmesi, kodlamanın da ona göre yapılması gerekir.

Veritabanı biraz şişecektir ama resimleri veritabanı ile birlikte taşınabilir durumda olacaktır.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Image nesnesine yüklemek istediğiniz resmin dosya yolunun bilinmesi gerekir.

Daha sonra, sizin btnGözat_Click makrosunda olduğu gibi bu dosya yolunu kullanarak resmi Image nesnesine yükleyebilirsiniz.

Image1.Picture = LoadPicture(ResimYolu)

Buradan hareketle; sizin ListView nesnesinde Resim başlığı altındaki alanda personele ait resimlerin dosya yollarını depolamanız durumunda, sorun çözülür diye düşünüyorum.

Image1.Picture = LoadPicture(Listview1.Listitems(Y)..........subitems(26).text)

Bu yönde biraz kurcalayın bence....

.
Kod:
Image1.Picture = LoadPicture(ListView1.ListItems(Y).ListSubItems(26).Text)
İlgiye teşekkür ederim haluk hocam.
DblClick olayına son satıra bu ekledim ancak image1 nesnesine resim yüklenmedi
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Buradan hareketle; sizin ListView nesnesinde Resim başlığı altındaki alanda personele ait resimlerin dosya yollarını depolamanız durumunda, sorun çözülür diye düşünüyorum.
Bu dediğimi yapmadıysanız, olmaması normal.

Diğer taraftan; siz esas @Zeki Gürsoy 'un 3. mesajda değindiği konuya bir cevap yazsanız olay netleşir.....

.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Yanlış anlamadıysam, resmi kaydetme metoduna bakılırsa veritabanına gömülü (binary data) olarak kaydetmeye çalışılıyormuş gibi görünüyor. Doğru mu @s.savas ? Doğruysa, alan'ın "OLE Nesnesi" olarak seçilmesi, kodlamanın da ona göre yapılması gerekir.

Veritabanı biraz şişecektir ama resimleri veritabanı ile birlikte taşınabilir durumda olacaktır.
Doğru anlamışsınız zeki hocam. Resimleri veritabanına gömülü olarak saklanmasını istiyorum.
Resim alanını "OLE Nesnesi" olarak tanımlayıp resim kaydetmek isteyince aşağıdaki hatayı veriyor. Kodlamanın düzenlenmesi gerekiyor. :cry:
Ekran Alıntısı.PNG
 

Ekli dosyalar

Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Ekli örnek ufkunuzu açacaktır...
Zeki hocam ilginize teşekkür ederim.
Listbox nesnesinde çalışıyor ancak kodu Listview nesnesine uyarlayamadım.
Resimler veritabanına kaydediliyor.
Ancak geri yükleme başarısız oldu.
Kod:
Image1.Picture = Nothing
    If Not IsEmpty(ListView1.ListItems(Y).ListSubItems(26).Text) Then Image1.Picture = ImageFromByteAr(ListView1.ListItems(Y).ListSubItems(26).Text)
Ekran Alıntısı.PNG
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
...ListSubItems(26).Text = rs("resım").value olarak aldıysanız, Byte array artık metne dönüştü. "
ImageFromByteAr" giriş argumanı ByRef olduğundan önce Byte Array'a dönüşmesi gerekir.

PHP:
dim byt () as byte
byt = strconv(byt, vbfromunicode)
Image1.Picture = ImageFromByteAr(byt)
olarak deneyin. Listview yüklü olmadığı için deneme imkanım yok.

Aslında rs("resım").Value dönen değerini hafızada saklamak için çok yol var. Biraz geniş düşünün.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
...ListSubItems(26).Text = rs("resım").value olarak aldıysanız, Byte array artık metne dönüştü. "
ImageFromByteAr" giriş argumanı ByRef olduğundan önce Byte Array'a dönüşmesi gerekir.

PHP:
dim byt () as byte
byt = strconv(byt, vbfromunicode)
Image1.Picture = ImageFromByteAr(byt)
olarak deneyin. Listview yüklü olmadığı için deneme imkanım yok.

Aslında rs("resım").Value dönen değerini hafızada saklamak için çok yol var. Biraz geniş düşünün.
Sanırım projeyi tekrar ListBox nesnesine dönüştürmek gerekiyor. :cry:
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
VBA' de ilerlemek için pes etmemek gerek. ;)

Byte Array saklamak için çok yol var demiştim. Şimdi aklıma gelen bir tanesi de, recordset'i listview nesnesine alırken resim verisini Listivew1.listitems(i).tag = rs("resım").value biçiminde atamaktır.

Listview "Click" olayına da, Image1.Picture = ImageFromByteAr(Listview1.selecteditem.tag) yazabilirsiniz.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
VBA' de ilerlemek için pes etmemek gerek. ;)

Byte Array saklamak için çok yol var demiştim. Şimdi aklıma gelen bir tanesi de, recordset'i listview nesnesine alırken resim verisini Listivew1.listitems(i).tag = rs("resım").value biçiminde atamaktır.

Listview "Click" olayına da, Image1.Picture = ImageFromByteAr(Listview1.selecteditem.tag) yazabilirsiniz.
Hocam hakkınızı helal edin. Evet listview nesnesi bu tür işlerde sıkıntılı imiş. Hele benim gibi bu işlere alaylı takımından girenler için zorluk kat sayısı biraz daha yükseliyor.
Projeyi tekrar ListBox nesnesi üzerine derledim.
Her şey çok güzel çalıştı. Sadece veri güncellerken modül olarak ilave ettiğiniz kod bloğunda hata veriyor. Bu sorunuda halledersek çok memnun olucam.
1.PNG
2.PNG
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Dosyaya erişim hatası olduğunu söylüyor. Resim dosyasını bulamıyor veya resim dosyası o anda başka bir program tarafından açıksa kapatıp öyle deneyin.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Zeki hocam veri güncelleme için dblklick ile listedeki veriler text ve combo lara yüklenirken resimde yüklenmiş oluyor. Kişiye yanlış resimde atanmış olabilir. Dolayısıyla resim nesnesi de dolu oluyor.


SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
 
Katılım
25 Kasım 2019
Mesajlar
1
Excel Vers. ve Dili
Office 365
Merhaba Çalışmanızı bugün biraz inceleme şansım oldu. Elinize sağlık
Son halini benimle paylaşmanız mümkün mü acaba...
tşk
 
Üst