12/2/2008

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

12/2/2008

>> Veri Tabanı Hazırlamak,Oluşturmak

Öncelikle standar exe formunu açın.
Add-Ins / Visual Data Manager i çalıştırın.

Önünüze VisData ekranı gelicek.
Buradan File / New / Microsoft Access / Versiyon 7.0 MDB.. yi seçin

Bu veritabanını kaydetmek istediğiniz konumu ve adı verip KAYDET 'e basın.

İki ekran açılacak, bunlar Database Window ve SQL Statement.

Database Window penceresindeki Properties 'e sağ kulak ile tıklayıp , Menuden New Table yi şeçin. Sonra ekrana Table Structure isminde bir form gelicek.

Table Name ' e bir isim verin. Sonra Add Field ' e basarak Add-Field formunun ekrana gelmesini sağlayın.
Eklemek istediğiniz alanları buralara yazın. Ör : Name : kısmına "isim" yazıp OK ' a basıyoruz , ikinci alana Name : kısmına tekrar "soyisim" yazıyoruz. Bu şekilde istediğimiz kadar alan tanımı yapıyoruz. En son Close 'ye basıp formu kapıyoruz.

Bu işlemler bittikten sonra Build the table ' ye basılır.

Database Window penceresine bizim table nameye verdiğimiz isimde bir anahtar açılır. Bu anahtar işaretlenir.

Utility / Data Form Designer ' e basılıp bu ekranın çıkması sağlanır.

Buradaki Form Name (w/o Extension): kısmına bir form adı yazılır.

RecordSource kısmından bizim database seçilir.

Kullanmak istediğimiz alanlar sağ tarafa taşınır ve Build the Form ' a basılır. sonra bu bütün pencereler kapatılır.

Projemize yeni bir formun eklendiğini görürüz. Bu formda yarattığımız database 'e ulaşmamız için gerekli olayların otomatik bir şekilde yerleştiğini görürüz.

Bu form yetersiz gelirse kendimizde buna benzer bir form yapabiliriz.

Kendimiz Bu forma benzer bir form yaratmak istersek;

 




Örnegimizi uygulamak için Visual Basic ile örnek olarak gelen BIBLIO.MDB adli veritabanina ihtiyacimız var. ( kendi hazırladığımız veritabanınıda kullanabiliriz )

Adim - 1 Öncelikle alet kutucugundan "veri" (Data) kontrolünü seçerek formunuzun üzerinde istediginiz büyüklüge getirin. Bu kontrolü veritabani içinde hareket etmek için kullanacagiz

Adim - 2 Data 1 kontrolünün Properties kutucugunu aktif hale getirin ve buradan Connect seçenegini Access olacak biçimde degistirin.

Adim - 3 Yine Data 1 kontrolünün Properties kutucugu aktifken, kontrolün DatabaseName seçenegini kullanarak istediginiz veritabanini seçin. Biz bu örnegimizde BIBLIO.MDB dosyasini kullanacagiz, bu yüzden seçenegi bu dosyayi görecek biçimde ayarlayin.


Eger diger programlarla iliskilerden dolayi, bu kontrole, tasarim asamasinda istediginiz veritabanini atayamiyorsaniz DatabaseName özelligini, programinizin çalisma asamasinda degistirip program çalisirken istediginiz veritabani dosyasini seçebilirsiniz.

Adim - 4 Data 1 kontrolünüzün RecordSource seçenegini, veri tabaninin istediginiz tablosuna erisim saglamak için kullanin. Eger daha önceden DatabaseName seçenegine herhangi bir veritabani dosyasi atadiysaniz. RecordSource seçenegine tikladiginizda karsiniza seçtiginiz veritabani dosyasinda kullanabileceginiz bölümler gelecektir. Biz bu örnegimizde "Titles" bölümünü kullanacagiz.

Adim - 5 Formunuzun üzerine, veritabani dosyasinda seçtiginiz alanlari görüntüleyebilmek için istediginiz sayida metin kutusu yerlestirin. Biz örnegimizde 3 farkli alan kullanacagimizdan formumuza 3 adet metin kutusu yerlestirdik. Veritabanimizi görüntülemek için kullanacaginiz kontroller metin kutulariyla sinirli degil. Resim kutularini, izgara kontrolünü, etiket kontrolünü ve bunun gibi birçok kontrolü bu is için kullanabilirsiniz.


Yerlestirdiginiz metin kutularini kullanarak veritabani dosyasinda kalici degisiklikler yapabilirsiniz.

Adim - 6 Text1 kontrolünün Özellikler kutusunu aktif hale getirerek DataSource seçenegini "Data1"i gösterecek biçimde degistirin.

Adim - 7 Metin kutularinin yanlarinda seçtiginiz alanlara uygun etiketler yerlestirin.

Adim - 8 "Text1" metin kutusunun görüntüleyecegi veritabani alanini DataField seçenegini kullanarak degistirin. Bu islemi her bir metin kutusu için gerçeklestirin ve her birinin farkli alanlari göstermesini saglayin.

Adim - 9 Son olarak programa bir çikis tusu ekleyin ve programi çalistirin. Ok tuslarini kullanarak veritabani içinde gezinebilir, metin kutularinin alanlarini degistirerek, diger alanlardaki verileri görüntüleyebilirsiniz.

Hepinize kolay gelsin.Örnek kod ;


Private Sub Command1_Click()
Label4.Caption = "Yeni kayıt formu"
Command1.Enabled = False
Command2.Enabled = True
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Data1.Recordset.AddNew

End Sub

Private Sub Command10_Click()
Data1.vbDataActionFind
End Sub

Private Sub Command2_Click()
Label4.Caption = "Bilgiler kaydedildi"
Data1.Recordset.MoveLast
Command1.Enabled = True
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Command5.Enabled = True
Command6.Enabled = True
Command7.Enabled = True
End Sub

Private Sub Command3_Click()
Command6.Enabled = True
Label4.Caption = ""

If Data1.Recordset.BOF Then
' MsgBox ("İlk kayıttasınız.")
Label4.Caption = "İlk Kayıttasınız"
' Data1.Refresh
Else
Data1.Recordset.MovePrevious
End If

End Sub

Private Sub Command4_Click()
Command6.Enabled = True
Label4.Caption = ""

If Data1.Recordset.EOF Then
' MsgBox ("En son kayıttasınız.")
Label4.Caption = "Son Kayıttasınız"
' Data1.Refresh
Else
Data1.Recordset.MoveNext
End If

End Sub

Private Sub Command5_Click()
Command6.Enabled = True
Data1.Recordset.MoveLast
Label4.Caption = "Son Kayıt"
End Sub

Private Sub Command6_Click()
'If Text1 = "" Then
'MsgBox ("Önce silinecek kaydı seçiniz.")
'Else
Data1.Recordset.Delete

Command6.Enabled = False
'End If
Label4.Caption = "Kayıt Silindi.!"
Data1.Recordset.MoveNext


End Sub

Private Sub Command7_Click()
Command6.Enabled = True
Data1.Recordset.MoveFirst
Label4.Caption = "İlk Kayıt"
End Sub

Private Sub Command8_Click()
Close
End
End Sub


Private Sub Form_Load()

End Sub

Private Sub Text1_Click()
Label4.Caption = "Kişinin adı"
End Sub

Private Sub Text2_Click()
Label4.Caption = "Kişinin soyadı"
End Sub

Private Sub Text3_Click()
Label4.Caption = "Kişinin mesleği"
End Sub


 

 

<- :: Sonraki Sayfa ->