AccessTr.neT
Access de Class Modül Kullanımı - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Access de Class Modül Kullanımı (/konu-access-de-class-modul-kullanimi.html)



Access de Class Modül Kullanımı - Kur@l - 25/11/2008

Accessde Class Modül Kullanımı ile ilgili örnek ararım...
elinde örnekleri olan varsa tarif edebilecekler varsa çok memnun olurum


Cvp: Access de Class Modül Kullanımı - Bilgisayarcı - 25/11/2008

Class Modulleri konu olarak ileri düzey programlama bilgisi gerektirir. Uzun yıllar programcılık yapıp hala class mantığını tam olarak kullanamayan insanlar tanıyorum.
Ya da adına class denilen bir çok örnek görüyorum alakası olmayan...
Tek bir örnekle ya da sadece tarifle bunu anlamaya çalışmak kulağa uzak ihtimal gibi geliyor.

Bir önceki sorunuza da buna benzer bir konu ile başlamıştınız. Class olmadan yardımcı olduk sanırım. Bence siz tam olarak ne yapmak istiyorsunuz onu anlatın class olmadan çözebilecek miyiz ona bakalım...


Cvp: Access de Class Modül Kullanımı - Puletin - 25/11/2008

Access'te Sınıf Modülleri

Class modülleri (Sınıf Modülleri) ayrı nesneler olarak kullanır, onlara istediğimiz gibi işlemler yaptırabilir ve onları çağırıp tekrar kullanabiliriz. Sıkça kullanacağımız bir işlemi sınıf modülüyle kolayca yapabiliriz. Bu konunun aslında doğrudan Visual Basic (VBA) ile ilgili olmasından dolayı biz biraz daha Access’e yaklaştırmaya çalışacağız. O yüzden okuyucunun sınıf modüllerini temel olarak bildiğini, en azından bu yazıdan bunun kısmen anlaşılabileceğini varsayıyorum.


Sıkça kullandığımız “Recordset” tanımı Sınıf yani bir Class’tır. Nesne Gözatıcısı (Object Browser) öyle söylüyor:

Class Recordset
Member of DAO
A representation of the records in a base table or the records that result from


Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("tablo1", dbOpenDynaset)
RS.AddNew
RS.Fields("isim") = "Hasan Baltacı"
RS.Update
RS.Close

Dim ile RS adlı değişkenin Recordset sınıfından olmasını sağladık. Addnew bu sınıfın metotlarından biri. Bu metot, RS’nin kayıt ekleme moduna geçmesini sağlıyor. Fields ise sınıfa ait bir özellik. Update ve Close ise diğer metotlardan.


LİSTE ÖZELLİKLİ BİR SINIF MODÜLÜ

Bizim sınıf modülümüz virgülle ayrılmış metinleri çözüp listeleyebiliyor ve sıralayabiliyor.
Veritabanı penceresinde (Database Window) Modül (Module) sayfası açıkken Insert/ Class Module (Ekle/ Sınıf Modülü) menüsünü seçip ilk sınıf modülümüzü ekleyelim.

İlk bakışta herhangi bir modülden farkı yok.

Aşagıdaki kodu yeni bir sınıf modülü (Class Module) açıp yazın. Sonra bunu MyListBoxComma adı ile kaydedin. Unutmayın, modülü her zaman bu adla çağıracağız.
‘SINIF MODÜLÜ: MyListBoxComma

Option Compare Database
Option Explicit

Private Dizi() As String
Private Toplam As Integer
Private Ayirac As String * 1

Private Sub Class_Initialize() ‘Sınıf yükleniyor.
Toplam = 0
Ayirac = ","
End Sub

Public Sub AddItem(Strx As String) ‘Listeye eleman ekle.
Toplam = toplam + 1
ReDim Preserve dizi(1 To Toplam) As String
Dizi(Toplam) = Strx
End Sub

Public Property Get Seperator() As String ‘Ayıraç.
Seperator = Ayirac
End Property

Public Property Let Seperator(ByVal vNewValue As String)
Ayirac = vNewValue
End Property

Public Function Clear() ‘Listeyi temizle.
Erase Dizi
Toplam = 0
End Function

Public Property Get ListCount() As Integer ‘Listedeki eleman sayısı.
ListCount = toplam
End Property

Public Sub Sort() ‘Listeyi sırala.
...
...
End Sub

Private Function GetMin(sira As Integer) As Integer
‘Sıralamak için kullanılıyor. Sadece bu Class içinde
‘kullanılabilir. Çünkü Public olarak degil, Private olarak tanımlanmış.
...
...
End Function

Public Function SetComma(ByVal Strx As String)
‘CommaText olarak girilen metni listeye dönüştürür.
...
...
End Function

Public Function GetComma() As String
‘Tüm listeyi ayıraç kullanarak cümle haline getirir.
...
...
End Function
Bu modülden örneğin şu şekilde faydalanabiliriz:
Sınıfı MyListBoxComma adı ile kaydettiğimiz için bu adı kullanmalıyız.
‘New ekini de kendi yazdığımız sınıfları kullanabilmek için yazmak zorundayız.
Dim Liste As New MyListBoxComma
Liste.AddItem "ocak"
Liste.AddItem "subat"
Liste.AddItem "mart" ‘... Tüm ayları yazın.
MsgBox liste.ListCount & " adet eleman:" & Chr(13) & liste.GetComma
Liste.Sort
Liste.Seperator = Chr(13) 'Satirsonu işaretini(13) koyunca altalta listelenecek.
MsgBox "Listenin sirali hali:" & Chr(13) & liste.GetComma
Liste.Seperator = "-"
Liste.SetComma ("sonbahar-kis-ilkbahar-yaz")
MsgBox Liste.ListCount & " adet oldu simdi."


Modülü biraz inceleyince Private ve Public şeklinde iki tanım görüyoruz. Bildiğiniz gibi Private ve Public tanımlamaları yordamların dışardan kullanılıp kullanılamayacağını belirliyorlar. Bilmeyenler için Public kullanmadan dışarıdan okuma ya da değiştirme yapılamayacağını ve Private kullanırsak sadece modülün kendi içinden okuma ve yazma yapabileceğimizi de söyleyeyim.
Burada normal işlev (function) ve yordamlardan (sub) farklı olarak Property Get ve Property Let tanımları da kullanılmış. Örneğin Seperator (Ayıraç) özelliği için hem Get hem de Let yöntemi var. ListCount için ise sadece Property Get var. Bu durumda ListCount özelliği sadece okunabilir, Seperator ise hem okunur hem de değiştirilebilir olmuştur.

Class_Initialize yordamı da anlayacağınız üzere bu modülün ilk çalışmaya başladığı yerdir. Fakat kullanılması zorunlu değildir. Aynı şekilde sınıflar bellekten atılırken varsa Class_Terminate adlı yordam çağrılır.