Bilgisayar iyi huylu makinadır. Ona anlayacağı şekilde emir verirseniz, emirlerinizi harfiyen yerine getirir.
Örnegin:
A ve B sayılarını karşılaştır, hangisinin büyük olduğunu bana söyle
Müşteri Bilgileri formunu aç
Bir ürünün alış fiyatı verilince satış fiyatını alış fiyatının 1.5 katı yap
Bu tip emirleri en esnek şekilde modul bölümünü kullanarak verebiliriz. Modulce konuşursanız bilgisayar sizin birçok dediğinizi rahatlıkla anlayacak ve dediklerinizi yapacaktır.
MODULC NEDİR?
MS Access, modul bölümünde Vba (Visual Basic for Application) diye adlandırılan dili konuşur. Bu dil Visual Basic dili ile tamamen uyumludur. Yani MS Access içinde programlama yapacaksanız Vba adlı dili bilmeniz ve bu dili kullanarak isteklerinizi belirtmeniz gerekmektedir.
MODULLERLE NELER YAPILAMAZ?
Modul normal hayatta kullandığımız dil gibidir. Türkçe'de birçok kelime vardır, Türkçe'nin gramer kuralları vardır. Sizin kelime hazineniz ne kadar geniş ise, gramer kurallarına ne kadar hakimseniz anlatmak istediklerinizi o derece rahat ifade edersiniz. Tabii aynı Türkçe bilgisine sahip insanlar, aynı şeyi anlatmak isteseler de çok farklı ifadeler kullanabilirler. Kimisi ifade zorluğu çekerken, kimisi derdini çok rahat anlatabilir. Yani insanların dili kullanma becerileri farklı olabilir ama sonuçta bu çalışmayla geliştirilebilen bir beceridir.
Sadede gelirsek modullerle neler yapılıp yapılamayacağı sizin Vba dilini kullanma becerinize bağlıdır. Kendinizi geliştirdikce ifade beceriniz artacak ve isteklerinizi bilgisayara çok daha rahat bir şekilde anlatabileceksiniz. Sizi sınırlayan tek şey yine kendinizsiniz.
MODULLER HAKKINDA BİLGİMİ NASIL GELİŞTİREBİLİRİM?
Her konuda olduğu gibi, bu konuda da bilginizi arttırmak istiyorsanız önce buna istekli olmanız, sonra da calışmanız gerekmektedir. Okumanız, araştırmanız, denemeler yapmanız. Herhalde Türkçe örneğini burada da kullanabiliriz.
VBA'nin gramerini ögrenmelisiniz: Komutlar ne şekilde verilir, söz dizimi nasıl olmalıdır, noktalama işaretlerini nasıl kullanmalıyım vs. gibi
VBA kelimelerini ögrenmelisiniz : Bu dilde hangi kelimeler vardır, hangisi ne manaya gelir. Nasıl bir dil öğrenirken sözlük kullanıyorsak, neyi ifade etmemiz gerektiğini bilirsek, bilgisayar dilleri için hazırlanmış kaynaklardan (sözlüklerden) gereken kelimeyi rahatlıkla bulabiliriz. Yani bütün kelimeleri (komutları) ezbere bilmemize gerek yoktur.
VBA ile ifade becerimizi geliştirmeliyiz: Nasıl edebi eserleri okudukca, kendimiz yazma denemeleri yaptıkca dili kullanma becerimiz artıyorsa, başkası tarafından yazılmıs kodları inceledikce, kendimiz denemeler yaptıkca Vba dilini kullanma becerimiz de gelişecektir.
ARTIK PRATİK YAPALIM
Artık pratik yapmanın zamanı geldi, değil mi?
Şimdi basit bir modul yazalım, sonra oluşturduğumuz bir formda, bir düğmeye basınca bu modul calışsın. (Form oluşturmayı ve forma bir duğme (Command Button) koymayı bildiğinizi farzediyorum.)
Modul bölümüne gelip Yeni (New) düğmesine tıklayın. Yeni bir modul sayfası açılacaktır. Büyük ihtimalle de ilk satırlarda şu ifadeleri göreceksiniz:
Option Compare Database
Option Explicit
Hemen bu ifadelerin altına şu satırları ekleyelim:
Public Function MerhabaDunya()
MsgBox ("Merhaba Dunya")
End Function
Bu modul çalışınca (aslında modul değil fonksiyon calışınca) ekrana "Merhaba Dunya" yazan bir mesaj penceresi çıkacaktır. Ama bu fonksiyonu nasıl çalıştıracağız. Önce modulümüzü kaydedelim (save). Module dilediğiniz ismi verebilirsiniz. Ben Denemeler adıyla kaydettim. Şimdi bir form oluşturup, forma bir komut düğmesi (Command Button) ekleyin. Bu düğmeye mouse ile çift tıklayınca özellikler (property) penceresi çıkacaktır. Olay (Event) bölümünde, Tıklatıldığında (On Click) bölümüne =MerhabaDunya() yazınız. En önde eşittir işareti, sonra fonksiyon adı, daha sonra da açma ve kapama parantezi.
Formu çalıstırdığımız vakit, bu düğmeye tıkladığımızda fonksiyonumuz çalışacak ve mesaj penceremiz ekrana gelecektir.
Bu örnek vazgeçilemeyen "ilk program" örneğidir. "Merhaba Dunya" ("Hello World") örneği ile, ne zaman yeni bir dil öğrenmeye başlarsanız karşılaşırsınız. Ben de geleneği bozmayayım dedim.
BURADA NELER OLDU?
Formların üzerine yerleştirilen her nesnenin (Text Box, Comba Box, Command Button vs.) birçok özelliği vardır. Bir de bu nesneler çeşitli olaylar karşısında tepki verirler. Örneğimizde, düğmeye mouse ile tıklayınca bize tepki verdi ve mesaj penceresi göründü. Biz nesnelerin hangi durumlarda, hangi tepkileri vermesi gerektiğini yukarıdaki örnekte de olduğu gibi kontrol edebiliyoruz. Önce modulümüzü (daha doğrusu fonksiyonumuzu) yazıyoruz. Sonra bu fonksiyonu bir nesnenin, bir olayına (event) eşitliyoruz. Eğer o nesne için, söz konusu olay oluşursa bizim fonksiyonumuz çalışıyor.
Eğer bu düğmeye hiç tıklanmasaydı bizim MerhabaDunya adlı fonksiyonumuz hiç çalışmayacaktı. Bu fonksiyonu başka bir olaya eşitleseydik, bu sefer de o olay oluşunca bizim fonksiyonumuz çalışacaktı. Örneğin Tıklatıldığında (On Click) bölümündeki =MerhabaDunya() ifadesini silip, Fare Taşındığında (On Mouse Move) olayı bölümüne =MerhabaDunya() yazarsak, form çalıştığında mouse oku, düğmemizin üstüne geldiğinde (düğmeye tıklamasak bile) fonksiyonumuz çalışacaktır.
SORUNUZ MU VAR?
Kafanızda bazı sorular oluşmuş olabilir. Ben oluşabileceğini tahmin ettiğim bazılarına cevap vereyim.
S.Bir fonksiyon birden fazla olaya eşitlenebilir mi?
C.Evet. Bir fonksiyon aynı nesnenin farklı olaylarına eşitlenebileceği gibi, farklı nesnelerin farklı olaylarına da eşitlenebilir. Bu olaylardan hangisi oluşursa oluşsun fonksiyonumuz çalışır.
S.Bir modul içine birden cok fonksiyon yazılabilir mi?
C.Evet. Aynı modul içine birçok fonksiyon yazılabilir. yalnız dikkat etmeniz gereken bazı kurallar var. Fonksiyonunuzun biri bitince End Function ifadesini girmelisiniz ve yeni satıra geçip yeni fonksiyonunuzu yazmalısınız. Örnek bir modul şu şekilde olabilir:
Option Compare Database
Option Explicit
Public Function MerhabaDunya()
MsgBox ("Merhaba Dunya")
End Function
Public Function Mesaj02()
MsgBox ("Programimi begendiniz mi?")
End Function
S.Fonksiyonlar sadece form üzerindeki nesnelerle mi bağlantılı kullanılabilir?
C.Hayır. Fonksiyonları çok farklı şekillerde de kullanabiliyoruz. Örneğin bir fonksiyon içinden bir başka fonksiyonu çalıştırabilirsiniz. Bir makro kullanarak bir fonksiyonu çalıştırabilirsiniz. Formun üzerindeki nesneler haricinde, formun kendi olaylarına da bir fonksiyonu eşitleyebilirsiniz. Aslında formun kendisi de bir komut düğmesi gibi bir nesnedir ve çeşitli olaylara çeşitli tepkiler verebilir. Örneğin form kapatılınca bir fonksiyonun çalışmasını sağlayabilirsiniz. Raporlarda (Reports) da fonksiyonlar kullanılabilir. Bir modulü herhangi bir nesneden bağımsız çalıştırmanız da mümkündür.
S.Nesnelerin olayları (event) hakkında bilgi verir misiniz?
C.Her nesnenin tipine göre tepki verdiği olaylar (event) vardır. Düğmeler, tıklanınca; metin kutuları (Text Box), bilgi girilince tepki verebilirler. Tabii bir düğmeye bilgi girmemiz mümkün olmadığı için, düğmelerin Güncelleştirme Sonrasında (After Update) diye bir olayı yoktur. ( hani derler ya "Arkadaş senin olayın ne?"; bizim de bu soruyu nesnelere sormamız lazım, yani sen hangi olaylara tepki verebiliyorsun?) Form üzerindeki bir nesnenin Özellikler (Property) penceresini açtık mı, olay (event) bölümünde o nesnenin hangi olaylara tepki verdiğini görebiliriz.
Bazı olaylar hakkında kısa bilgi:
Güncelleştirme Sonrasında (After Update) :
Bir nesnenin (örn. metin kutusu) bilgisi değişince oluşur
Tıklatıldığında (On Click ) :
Bir nesneye mouse ile tek tıklanınca oluşur.
Çift Tıklatıldığında (On Dbl Click):
Bir nesneye mouse ile çift tıklanınca oluşur.
Açıldığında (On Open ):
Bir form ya da rapor açılmak istenince oluşur.
Kapandığında (On Close ):
Bir form ya da rapor kapatılınca oluşur.
Etkinleştiğinde (On Activate ):
Bir form ya da rapor etkinleşince (yani onun üzerinde çalışmaya başladıysak) oluşur.
Aynı anda birkaç form veya rapor açık olabilir ama sadece birisi etkin (active) olabilir. O da üzerinde çalıştığımız form ya da rapordur.
Etkin Durumdan Çıktığında (On Deactivate):
Üzerinde çalıştığımız form ya da raporu bırakıp başka bir form ya da raporla çalışmaya başlarsak, ilk çalıştığımız form ya da rapor etkinliğini kaybeder. O zaman bu olay oluşur.
Zaman Dolduğunda (On Timer):
SüreÖlçer Aralığı (Time Interval) bölümünde belirtilen süre dolunca bu olay oluşur. Süreölçer Aralığı normalde 0 (sıfır) değerine sahiptir. Yani aktif değildir. Buraya milisaniye cinsinden süre girilir. Bu süre her dolduğunda Zaman Dolduğunda (On Timer) olayı oluşur. Örneğin SüreÖlçer Aralığı (Time Interval) bölümüne 2000 yazarsak her 2000 milisaniyede (2 saniyede) bir, Zaman Dolduğunda (On Timer) bölümüne yazdığımız fonksiyon çalışır.
DİĞER ÖRNEKLERE GEÇELİM
Şu ana kadar sadece msgbox() komutunu gördük. Bu komut verdiğimiz bir ifadeyi mesaj penceresi içinde ekrana getirmektedir. Fonksiyonumuz içinde farklı komutlar kullanarak, daha başka işlemler yaptırmamız mümkündür. Yeni komutlara geçmeden önce bir hatırlatma yapalım.
Komutları her zaman aşağıda gördüğümüz yapıdaki fonksiyonların içine yazacağız.
FonksiyonAdi bölümüne dilediğiniz ismi veriniz ama isim verirken boşluk karakterini ve Türkçe harfleri (ğ, ü, ş, ı, ö, ç) kullanmayınız.
Üç nokta (. . .) görünen bölüme komutlarımızı yazacağız.
Bu fonksiyonu çalıştırmak için ilk hazırladığımız formdaki komut düğmesinin (Command Button) Tıklatıldığında (On click) olayını (event) fonksiyonumuza eşitleyeceğiz. Yani bu kısma
=FonksiyonAdi()
yazacağız. (FonksiyonAdi bölümünde sizin fonksiyonunuza verdiğiniz isim olmalı). Daha sonra fonksiyonunuzu başka olaylara da eşitleyip denemeler yapabilirsiniz.
Örnek Yapı:
Public Function FonksiyonAdi()
. . .
End Function
DİĞER ÖRNEKLER
Örnek 1: Bir başka formu açan fonksiyon. Bu fonksiyonda tırnak ' ile başlayan satır işleme girmez, bu satır sadece modulumuz içine notlar yazmak içindir. Tırnak işareti kullanarak modulünüz içine istediğiniz kadar açıklama yazabilirsiniz.
Public Function FormAcma()
'FormAdi isimli formu ac
DoCmd.OpenForm "FormAdi"
End Function
Örnek 2: Verdiğimiz iki sayıyı karşılaştıran fonksiyon
Bu örnekte iki tane (A ve B adlı) değişken tanımlanmaktadır.
Bu değişkenler Integer (Tam sayı tipindedir)
Değişken tanımlarken şu yapı kullanılır:
Dim DegiskenAdi As DegiskenTipi
Public Function SayilariKarsilastir()
Dim A As Integer
Dim B As Integer
A = 50
B = 100
If A > B Then
MsgBox ("A, B'den buyuktur")
Else
MsgBox ("A, B'den buyuk degildir")
End If
End Function
Örnek 3: Verdiğimiz iki ifadeyi birleştiren fonksiyon
Bu örnekte string (metin) tipinde değişkenler tanımlanmıştır.
Değişkenler saklayacakları bilginin tipine göre ayrılırlar.
Tam Sayı, Kesirli Sayı, Tarih/Zaman, Metin gibi farklı bilgileri kaydetmek için farklı değişken tipleri kullanırız.
Public Function MetinleriBirlestir()
Dim Ad As String
Dim Soyad As String
Ad = "ERKAN"
Soyad = "UCAR"
msgbox(Ad & Soyad)
msgbox("Benim adim " & Ad & Soyad)
msgbox("Benim adim " & Ad & " " & Soyad)
End Function
ŞİMDİLİK BİTİRELİM
MS Access ile ilgilenen ve modulleri kullanmaya başlamak isteyenler için başlangıç seviyesinde bilgi vermeyi amaçladım. Umarım faydalı olmuştur.
™Hiç Birimiz, Hepimiz Kadar Akıllı Olamayız...®