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