• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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

  • Konbuyu başlatan Konbuyu başlatan s.savas
  • Başlangıç tarihi Başlangıç tarihi
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
 
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....

.
 
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.
 
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
 
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.....

.
 
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

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
 
...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.
 
...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:
 
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.
 
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

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.
 
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
 
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
 
Geri
Üst