>> Access Veri Tabanına Resim Kaydetme Ve Görüntüleme
'****************************************************************************
'*Bu programın çalışabilmesi için DAO kütüphanesinin referans edilmesi
'* gerekir. Bu işlem için VB menüsünden
'* PROJECT - > REFERENCES seçtikten sonra açılan listeden
'* MICROSOFT DAO 3.51 OBJECT LIBRARY'yi seçili hale getirin.
'* Ayrıca COMMONDIALOG nesnesini projenizde kullanabilmek için
'* ToolBox üzerine sağ fare tuşu ile klik yapın açılan pop up menüden:
'* COMPONENTS'i seçtikten sonra açılan listeden
'* MICROSOFT COMMON DIALOG CONTROL 6.0'ı seçili hale getirin.
'* Ayrıca form üzerine aldığınız CommonDialog kontrol'ünün adını (Name), ekranın
'* sağ tarafında bulunan Properties penceresinde CD1 olarak değiştirin.
'* İlk yüklemede adı CommonDialog1'dir. Değiştiremezseniz buradaki CD1'leri
'* CommonDialog1 olarak değiştirin.
'*Bu programın ders şeklinde düzenlenmiş açıklaması VB Dersleri bölümüne eklenecektir.
'****************************************************************************
'Bunlar Form_General Declarations kısmına yazılacak:
Option Explicit
Private Db As Database
Private Rs As Recordset
Private Path1 As String
Private ResimAdi As String
Private Resim As String
Private ResimPath As String
'
'
'
'
Private Sub Command1_Click()
'Common dialog nesnesi için filtre belirleyelim (ki sadece onları göstersin...)
CD1.Filter = "Gif Files (*.gif)|*.gif|Jpg Files" & _
"(*.jpg)|*.jpg|Bmp Files (*.bmp)|*.bmp"
'esas filtreyi belirleyelim (FilterIndex özelliği "dosya aç" diyaloğu yüklendiğinde ilk gösterilecek dosya türünü belirler.
'Burada biz ikinci (yani JPG...) dosyayı esas dosya olarak belirliyoruz:
CD1.FilterIndex = 2
'CommonDialog açılışta (Dosya Aç) hangi dizin içini göstersin:
'Buradaki Path1 dizini formun Load prosedüründe programın çalışma yolu olarak belirlenmişti.
CD1.InitDir = Path1
'Open Dialogu açılsın:
CD1.ShowOpen
'Cancel'e basıldıysa sub'dan çıkalım:
If CD1.FileName = "" Then Exit Sub
'(CommonDialog'un FileTitle özelliği seçilen dosyanın adını tutar) Dosya adını bir değişken içine alalım. :
ResimAdi = CD1.FileTitle
'(CommonDialog'un FileName özelliği seçilen dosyanın sürücü+dizin dahil olmak üzere tam yolunu tutar)
ResimPath = CD1.FileName
'Resmi bir ImageBox içine yükleyelim:
Image1.Picture = LoadPicture(ResimAdi)
'Yukarıda yapılan işlem bilgisayarınızdan bir resim seçmek ve o'nu bir ImageBox içinde göstermekten ibarettir.
'Ancak CommonDialog nesnesini kullanmak açısından güzel bir örnektir.
End Sub
Private Sub ResimKaydet_Click()
'Bu kod adı resim.mdb olan ve içinde en az iki alanı bulunan bir veritabana gereksinim 'duymaktadır.
'Tablonun yapısının aşağıda inceleyiniz:
'resim.mdb Veritabanı -> Bir [mdb] veritabanı içinde en az bir adet
tablo olmak zorundadır. ' Bizin tablomuzun adı da veritabanıyla aynı
adda.
'resim Tablo -> Bir tablo içinde en az bir adet alan olmalıdır. Burada iki alan var.
'ResimAd Alan (Text 50) -> Bu sayıyı (yani resim adının 50 karakterle sınırlandırılmasını
' değiştirebilrsiniz. Mesela Text 250 gibi)
'Resim Alan (Binary) -> Resim kaydetmek için alan türünün Binary olarak düzenlenmesi gerekir. Buna dikkat edin.
'Veritabanını aç
Set Db = OpenDatabase(Path1 & "resim.mdb")
'RecordSet'i aç
Set Rs = Db.OpenRecordset("resim")
'Boş bir kayıt alanı hazırla:
Rs.AddNew
'İlk önce Veritabanına resmin adını ekle
Rs!ResimAd = ResimAdi
'************* Resmin Veritabanını Kaydedilmesi **********************************
'Aşağıda resmi byte byte içine alacak bir değişken tanımlayacağız.
'Bu değişken bir array olacak.
'Öncelikle bu değişkeni boyutlandırmıyoruz. Parantez içleri boş.
Boyutlandırma işlemini dosyanın 'boyutu kadar yapacağız. Bu işlem de
Redim ile yapılacak:
Dim Img() As Byte, i As Long
Dim DosyaNo As Integer
'Resmi CommonDialog ile seçtiğimizde, o resmin uzun yolunu (sürücüdeki yerini) bir değişken
'içinde kaydetmiştik. Şimdi o dosyayı Binary modunda açıyoruz. Dosyayı açmadan önceki satır ise
'sistemden dosya işlemlerinde kullanmak üzere sıradaki serbest dosya numarasını alır:
DosyaNo = FreeFile
Open ResimPath For Binary As DosyaNo
'Img() değişkenimize (array) tek boyutlu olarak resim dosyasının boyu kadar büyüklük atadık:
ReDim Img(LOF(DosyaNo))
'Dosyadan her adımda bir byte okuyup Img değişkeni içine yazıyoruz:
Do While Not EOF(DosyaNo)
Get #DosyaNo, , Img
i = i + 1
Loop
Close #DosyaNo
'Değişkeni veritabanı içine kaydediyoruz. Veritabanını vs kapatıyoruz:
Rs!Resim = Img
Rs.Update
Rs.Close
Set Rs = Nothing
Db.Close
Set Db = Nothing
'************ Veritabanına Kayıt İşlemi Sona Erdi**********************************
End Sub
Private Sub Form_Load()
'Form yüklendiğinde programın çalışma yerini saptamamamız gerekir:
If Right(App.Path, 1) = "" Then
Path1 = App.Path
Else
Path1 = App.Path & ""
End If
'Path1 değişkeni içine programımızın tam olarak yolunu yükledik
'Formumuz üzerinde bir de ListView var. Bunun aracılığıyla
veritabanı içindeki resimlere tek klik 'yaparak ulaşabileceğiz. Bu
listView içinde resimlerin adları listelenecektir.
'Aşağıdaki ******** veritabanı içindeki resimleri listeler.
LoadList1
End Sub
Private Sub List1_Click()
'Bu Sub tek klik ile veritabanı içindeki resimleri bir PictureBox içine alır ve gösterir:
'Veritabanını aç
Set Db = OpenDatabase(Path1 & "resim.mdb")
'Recordset'i oluştur
Set Rs = Db.OpenRecordset("resim")
Dim t As Integer ' Bu bir kontör'dür
'Listeleme işlemi ilk kayıttan başlamalı. Bu yüzden ilk kayda gidiyoruz:
Rs.MoveFirst
'Şimdi Rs.RecordCount sayısı kadar dönen bir döngü içinde kliklenen
resmin adı ile veritabanının 'ResimAd alanında kayıtlı adı denkliğini
arayacağız. Denklik oluşursa resim bulundu demektir ve o 'resim
picturebox içinde gösterilecektir.
For t = 1 To Rs.RecordCount
If Trim(Rs!ResimAd) = Trim(List1.Text) Then
'**************Veritabanındaki Resmin Bir Dosyaya Kaydedilmesi******************
Dim Img() As Byte, i As Long, Dosya As Integer
'Veritabanının Resim alanında bulunan bilgiyi Img değişkenine yükledik:
Img = Rs!Resim
'Boş dosya numarasını aldık:
Dosya = FreeFile
'Programın çalışma yolu (Path1) ile veritabanının ResimAd alanından
oluşan ve dosyanın tam uzun adını gösteren bir şekilde yeni bir dosya
yarattık. Mesela: C: esimlerçiçek1.jpg
Open Path1 & Rs!ResimAd For Binary As #Dosya
'Bilgiyi (resmi) yani Img'nin içindekileri Dosya nolu dosya içine kaydediyoruz:
Put #Dosya, , Img
'Dosyamızı kapatıyoruz:
Close #Dosya
'**************Veritabanındaki Resmin Bir Dosyaya Kaydedilmesi Bitti**************
'İşiniz sadece resmi göstermek ise tabiki yukarıdaki işlemleri
yapmanıza gerek yok. Yukarıda 'ayrılmış alandaki kod veritabanı içinden
bir resmi aynı adda programın çalışma dizini içine 'kaydeder. Aşağıdaki
kod ise sadece resim gösterir:
Image2.Picture = LoadPicture(Path1 & Rs!ResimAd)
Else
Rs.MoveNext
End If
Next t
Rs.Close: Set Rs = Nothing: Db.Close: Set Db = Nothing
End Sub
Private Function LoadList1()
List1.Clear
'Veritabanını aç
Set Db = OpenDatabase(Path1 & "resim.mdb")
'Recordset'i oluştur
Set Rs = Db.OpenRecordset("resim")
Dim i As Integer
'Veriatabanını ilk kaydına gidiyoruz:
Rs.MoveFirst
'Aşağıdaki döngü ResimAd alanındaki bilgiyi alarak ListView içine
doldurur. Böylece tüm resimlerin tek tıklama ile seçilebileceği bir
liste oluşmu olur:
For i = 1 To Rs.RecordCount
List1.AddItem Rs!ResimAd
Rs.MoveNext
Next i
Rs.Close
Set Rs = Nothing
Db.Close
Set Db = Nothing
End Function
< Başka bir siteden bilgi amaçlı olarak alınmıştır! >