Access'te Başvuru Kitaplığı Yazmak
Bu ay biraz derinlere inip Access’teki References (Başvurular) listesine kendi başvuru kitaplığımızı ekleyeceğiz.
REFERENCE LIBRARY
Diğer Office uygulamalarında da olduğu gibi Access’te hem standart nesne kütüphaneleri hem de Activex kütüphaneleri kullanılabiliyor. Bu yazıyı yazdığım Word2000’de Visual Basic Editor’ü açtığımda Tools/ References menüsünden tüm başvuruları görebiliyorum. Aynısı Access için geçerli olup Office’te programlama anında tüm bu kütüphanelerden istediğimiz gibi faydalanabiliyoruz.
Access’te boş bir dosya açıp modül sayfasında yeni bir modül oluşturalım. Tools/ References (Araçlar/ Başvurular) menüsü ile başvuruların listelendiği pencereyi görelim.
MSACC9.OLB dosyasının Microsoft Access 9.0 Object Library kütüphanesi olduğunu öğreniyoruz. Visual Basic For Applications ile beraber bu ikisi tüm Access uygulamalarında kullanılan dosyalar. Access bunları kaldırmamıza izin vermiyor.
Örneğin Access projenizde müzik çalmak istiyorsunuz ve elinizde bir Wav dosyası var. Bunun için eğer sisteminizde Microsoft Media Player yüklü ise büyük ihtimalle başvurular listesinde buna ait kütüphane görünecektir. O zaman çok kısa bir kodla müzik çalmayı başarabiliriz. Başvurular listesinden Windows Media Player’i seçip alttaki dört satırı çalıştırın.
On Error Resume Next
Dim muzik As New MediaPlayer.MediaPlayer
muzik.Open "c:\windows\media\ding.wav"
muzik.Play
Gördüğünüz gibi çok kolay. Ama listede onlarca kütüphanenin hangisinin nasıl kullanıldığını nereden öğreneceğiz? Üstteki müzik çalma örneğini vermeden önce başvurular listesinden hangisini örnek vereyim diye aradım. Hiçbirinin nasıl kullanıldığını zaten bilmiyor idiysem bana sadık dostumuz Object Browser (Nesne Gözatıcısı) yardımcı olmuş demektir. F2’yle onu açtıktan sonra sol üstten Media Player’i seçerek içindekileri biraz incelemek gerekiyor.
İlk olarak müziği çalacak nesneyi bulmak lazım. Bunu sol alt listeden alıyoruz. İlk bakışta siz de aradığımız şeyin “Media Player” adında olduğunu anlayacaksınızdır. Bunu seçince sağdaki listeden de Open, Play gibi şeyler aramamız gerektiği de hemen aklımıza gelenlerden. Open’i seçtiğimizde alttaki kısımda nasıl kullanılacağı gösteriliyor. Bir dosya adını parametre olarak vermek gerekiyormuş. Sonra da Play’a bakacağız ve üstteki birkaç satırlık kodu çok kısa bir sürede keşfederek oluşturacağız. Eğer Media Player’iniz MP3 çalıyorsa sizin de bu şekilde MP3 çalmanıza hiçbir engel yok. Hatta Access’te kendi müzik listenizi bile yapabiliyorsunuz bununla. Tabii VB’ciler tüm bunların VB’de de yapılabileceğini zaten biliyorlardır.
KENDİ BAŞVURU KÜTÜPHANENİ KENDİN YAP!
Geldik kendi başvuru dosyamızı yapmaya. Yeni bir Access dosyası açıp içine birer adet tablo, form ve rapor yerleştirelim. Örneğimizde üçü de “Kisiler“ adında tablo, form ve rapor var. Sonra modül sayfasında yeni bir modül oluşturup aynen şunları yazıyorum:
Option Compare Database
Option Explicit
Public Function Topla(sayi1 As Long, sayi2 As Long) As Long
Topla = sayi1 + sayi2
End Function
Public Sub KisilerFormunuAc()
DoCmd.OpenForm "Kisiler"
End Sub
Public Sub KisilerRaporunuAc()
DoCmd.OpenReport "Kisiler"
End Sub
Bir başvuru dosyasının içindeki bir formu, raporu veya diğer şeyleri açabilmek için aynı dosya içinde bu işleri yapan kodlarımızın olması gerekiyor. Örnekte rapor ve formu açabilmek için iki ayrı kod var. “Topla” adlı işlev ise genel bir yardımcı işlev görevi üstlenecek. Yani biz bu başvuru dosyasını nereye eklersek ekleyelim bu işlevi Access’in kendi işleviymiş gibi kullanıp, form ve raporu da açabileceğiz. Bu dosyamızın adı Referans.mdb olsun.
Zorunlu olmasa da bir ayar yapmamızda fayda var. Başvurular kısmında bu dosyanın görünen ismini belirlememiz gerekiyor. Yani projemizin adını. (Visual Basic Editor'de Tools/Properties/ProjectName.)
Application.SetOption "Project Name", "İlk Referans Dosyamız"
Bunu yaparak başvurular kısmında dosyamızın adının “İlk Referans Dosyamız” şeklinde görünmesini sağladık.
Şimdi bunu kullanmak için kapayıp yeni bir Access dosyası açıyoruz. Yeni bir modül sayfası açarak Başvurular bölümünde bu dosyayı bulup seçelim. Sonra Object Browser ile ilk başvuru kitaplığımızı inceleyelim.
İlk başvuru dosyamızdaki kullanılabilir işlevleri
Object Browser ile görebiliyoruz.
Şimdi alttaki satırları çalıştırmayı deneyelim.
KisilerRaporunuAc
KisilerFormunuAc
MsgBox topla(3, 5)
Böylelikle hem başka bir Access dosyası içindeki form ve raporu açabiliyoruz, hem de kendi ortak işlevimizi yazmış oluyoruz.
Tüm bunlardan sonra yapılması önerilen son bir işlem daha var. Başvuru dosyamızı derleyip kodlarını gizlemek ve kullanıma tam hazır hale getirmek. Şimdi Referans.MDB dosyasını tekrar açıp MDE dosyası oluşturalım. Tools/ Database Utilities/ Make MDE File (Araçlar/ Veritabanı Hizmet Programları/ MDE Dosyası Yap) seçeneği ile MDE dosyamızı oluşturduk. Bu şekliyle hem kimse kendi özel kodlarımızı ve tasarımlarımızı göremeyecek ve değiştiremeyecek hem de bu dosyamız normal bir EXE gibi hızlı çalışacak.
Dosyamız hazır. Kendisini belirtmek için uzantısını örneğin REF olarak değiştirirelim. Şimdi asıl programımızdaki başvuru işaretini kaldırıp Referans.REF dosyasını yeniden yüklememiz gerekecek.
Bu ilk kütüphanemizi Access içinden bir DLL ya da OCX gibi kullanabiliriz artık.
Başvurularla ilgili genel olarak anlatacaklarım bu kadar. Sonrasında bununla ilgili birkaç ipucu vermekle yetineceğim. Bu özelliği kullanmaya karar vereceğiniz zaman CodeDB ve CurrentDB adlı iki nesneyi hatırlamanız faydalı olabilir. Bir başvuru dosyası içinde CurrentDB kullanırsanız bu, başvuruyu kullanan dosyayı işaret eder. Ama CodeDB kullanıyor iseniz bu da kodun bulunduğu dosyayı yani başvuru dosyasının kendisini işaret etmiş olur. Sıkça kullandığımız CurrentDB yerine CodeDB kullanmamızın sakıncası yoktur aslında. Halihazırda CodeDB zaten kodun yazılmış olduğu uygulamanın kendisini ifade ediyor.
İPUÇLARINA DEVAM - Bir Formu Veya Raporu Birden Çok Kere Açmak.
Access’te de VB ve diğer dillerde olduğu gibi bir formu ya da raporu aynı anda istediğimiz kadar açma şansımız var. İşte örnek:
Global Frm1 As Form_Form1
Global Frm2 As Form_Form1
Sub AyniFormu3kereAc()
DoCmd.OpenForm "Form1"
Forms("Form1").Caption = "Bu, Form1'in orjinali"
Set Frm1 = New Form_Form1
Set Frm2 = New Form_Form1
Frm1.Caption = "Bu, Form1'in ilk kopyası"
Frm2.Caption = "Bu da Form1'in ikinci kopyası"
Frm1.Visible = True
Frm2.Visible = True
MsgBox "FORM1'in 2 adet kopyası açıldı."
End Sub
Burada kullandığımız Form_Form1 tanımlaması Form1 formuna ait sınıfın adıdır. Geçen sayıda bahsettiğimiz sınıf modülleri konusunda bundan bahsetmek için acele etmedik. Normalde form ve raporlara ait kodların bulunduğu modüller aslında sınıftır ve bir sınıf ile yaptığımız herşeyi form ve raporlara ait modüllerle de yapabiliriz. Burada şunu unutmamakta yarar var. Eğer FRM1 ve FRM2’yi aynı yordam (SUB) içinde tanımlasaydık kod bitip bilgiler bellekten atılırken bu formlar kapanacaktı. Bunu önlemek için onları "Global" deyimi ile tanımladık.
Şimdi yeni bir form veya rapor oluşturup onun üzerinde deneme yapmaya çalışırken neden hata oluştuğunu sorabilirsiniz. Böyle bir durumda form veya raporunuza ait bir modülün varolmadığından şüphelenin. O zaman bunun kod kısmına bir harf de olsa birşeyler yazıp sınıf modülün oluşmasını sağlamalısınız. Çünkü kod olmadan sınıf modülü olmaz.
Gelecek sefer gelişmiş sorgu (query – sql) örneklerini incelemek istiyorum. Sadece Access’çilerin değil, SQL kullanan ve de kullanmak isteyenlerin bunu kaçırmamasını öneririm. Sonrasında Add-In yazma konusuna başlayabilmek için kod ile Access formlarının ve raporlarının nasıl düzenlendiğinin örneklerini inceleriz. Ama ondan önce ODE Tools’tan bahsetmeyi planlıyorum.
Güneşli güzel günler...
ACCESS HİKAYELERİ
ODE TOOLS GÜNLERİM
Sevgili Günlük. Access97 için ODE Tools’u satın almış bulunuyoruz. Yanlışlıkla getirdikleri yükseltme sürümünden sonra temiz bir sürüm elde ettik. Office97 Developer Edition adlı bu kutu içinde hem Office97 Professional var, hem de Office Developer Tools (ODE Tools). En önemlilerinden biri de Office programlama için iki güzel kitap. Access’te ya da Office’te programlama yapmaya çalışırken neyi yapıp neyi yapamayacağımızı bu kitaplar gayet iyi anlatıyor.
O güne kadar MDB dosyalarını EXE’ye dönüştürdüğünü zannettiğim Access Setup Wizard’ının arayüzü de Access’te yapılmış. EXE’ye dönüştürmese de zaten MDE dosyaları kısmen EXE’ler gibi çalıştığı için sorun yok. Artı ve eksiler şöyle:
- Setup Wizard ile güzel bir kurulum programı hazırlıyoruz ve programımızı Access’in kendisi olmadan müşterimize kurabiliyoruz. Paket gerekli dosyaları bizim için toparlıyor. İçine bizim programımızla birlikte Access Run-Time modülünü koyuyor.
- Bir bilgisayarda sadece bir adet Run-Time modülü olması yeterli. Sonrasında istediğimiz kadar MDB, MDE dosyasını kopyalarak bunları çalıştırabiliyoruz.
- Haliyle müşterimize Access kurmaya gerek kalmıyor.
- Türkçe Access’te hazırlanan bir kurulumu İngilizce Access olan makineye kurduğumuzda maalesef onun dilini Türkçe’ye çeviriyor. Tersi de geçerli. Bir bakıyoruz form tasarımlarındaki Properties penceresinde Özellikler yazmaya başlamış. Çok acıklı değil ama neyse...
- Kurulum hazırlama yeteri kadar ayrıntılı. VB’dekinde olduğu gibi birçok seçenek burada da var.
- Ayrıca kurulumda ODBC ve diğer veritabanı seçenekleri var. İstenirse grafik (Chart), Outlook ve Exchange modülleri de dahil edilebiliyor.
- OCX kullanmış isek onu listeye kendimiz ekliyoruz ve Wizard, o OCX için gerekli diğer dosyaları kendisi buluyor.
Gelgelelim bazan kafa karıştırıcı şeyler de oluyor. Bir tanesini denerken kurulum sırasında bazı hatalar oluştu. Neden olduğunu zar zor anlayabildik. Meğer ki ayarları yaparken klasör ismi sorulan yerlerde klasörün tam adı yazılacak, ama isminin sonunda bölü işareti olmayacakmış. O kadar çok makine ve sistemde test ettim ki rasladığım problemlerin altından kalkmam epey vaktimi aldı. Sağolsun Microsoft’un destek sitesi böyle durumlarda ilaç gibi geliyor.
Epeydir, çözemediğim bir hata olduğunda en iyi yardımcılarımdan olan Altavista’ya o hata mesajının aynısını soruyorum. Akıllı AV şimdiye dek en az on adet büyük problemimin yarısından fazlasında, verdiği ilk cevapta çözüme ulaştırmıştı beni. Bunlar da MS’nin destek sitesi oluyor çoğunlukla. Sonradan Ask.com’u keşfettim. İlk sorduğum şey “where are you?” idi. Cevabı görünce gözlerim yaşarmıştı. “.. at AskJeeves!”. Tabii bir de azar işittim. Soracak doğru dürüst birşeyim yok muymuş!
Kurulum paketi hazırlamaya devam ederken bir yandan da deneylere devam ediyorum. Zira paketi hazırlamak azıcık uzun sürüyor. Acaba “D” sürücüsüne kurulu yepyeni bir Windows’ta bu kurulumu çalıştırdığımda herşey yerli yerine oturacak mı? Cevap evet oldu. Son olarak merak ettiğim iki şey vardı. Kendi başvurularımızı eklediğimiz dosyalar sabit klasör adını arayacakları için başvuru problemleri ile karşılaşabilir miyiz? Bunun da cevabı evetti, maalesef ki. (Tabii o zaman bunun başka türlü çözebileceğini bilmiyordum.) Bir de Access 2000 yüklü makinelerde Access 97 için hazırlanmış kurulum sorun çıkarmadığı için testler dizisini sadece bir fireyle bitirmiş oldum.
Sonuç olarak Setup Wizard bize, dosyaları onarma (repair/compact) komutları dahil Programlar menüsündeki kısayolları da ayarlayan ve gerekirse Registry’ye kurulumla ilgili kayıtlar giren güzel bir kurulum paketi yapıyor.
EXE yapmasak da programlarımızı Access’e
gerek kalmadan kurabileceğiz şimdi.
Ne Derece işine yarar biLemem ama bi bak istersen..
Bu sitenin çalışması için temel çerezleri ve deneyiminizi geliştirmek için isteğe bağlı çerezleri kullanıyoruz.