Microsoft Access ile en çok kullanılan fonksiyonlardan bir tanesi etki alanı komutlarıdır. Etki alanı komutları içinde yer alan Dlookup fonksiyonu aslında SQL de kullanılan SELECT sorgusunun özel bir şekilde yazılmış halidir. Böylelikle denetimlerin veya tabloların varsayılan değer alanlarında çalıştırılabilir. Şimdi Dlookup komutu nasıl kullanılır örneklerle inceleyelim.
- Bilmemiz gereken 3 şey var:Hangi tabloda değer arayacağız?
- Bu değeri hangi alanda arayacağız?
- Ararken hangi şarta/kritere göre arayacağız?
Bu üç unsur Dlookup fonksiyonunda ilgili yerlere yazılınca bize geriye bir değer döndürür. Şimdi Dlookup komutunun sintaksını inceleyelim.
DLookup("TablodakiAlanAdı", "TabloAdı", "Kriter")
1. parametremiz TablodakiAlanAdı, değeri hangi alandan alacak isek o alanın adını yazıyoruz.
2. parametremiz TabloAdı, hangi tabloda bu değeri arıyorsak o tablonun adı olmalı.
3. parametremiz Kriter, baktığımız tablodaki hangi alanda neyi karşılaştıracağımızın yazılacağı kısımdır. Mesela OgrenciNo=156 yazarak öğrenci numarası 156 olanı aradığımızı belirtmiş olacağız.
Hadi şu işi biraz daha somutlaştıralım:
DLookup("GsmNo", "Personeller", "TcKimlik=12345678901")
Burada Personeller isimli tabloda TcKimlik isimli alandaki değeri 12345678901 olan bir kayıt arıyorum. Eğer böyle bir kayıt bulabilirsem GsmNo isimli alandaki değer ne ise onu elde edeceğim. Elbette elde ettiğim değeri bir değişkene veya denetime aktarmalıyım. Formumun üzerinde txtMobilTelefon isimli bir metin kutusu olacak ve elde ettiğim değeri orada göstermek isteyeceğim. O halde üstteki kod şu şekilde olmalı:
txtMobilTelefon = DLookup("GsmNo", "Personeller", "TcKimlik=12345678901")
Eğer TcKimlik alanındaki değeri 12345678901 olan bir kayıt yoksa geriye boş bir değer dönecektir. Boş dönmesinin bir diğer yoluda aslında TcKimlik alanındaki değeri 12345678901 olan bir kayıt vardır ancak GsmNo alanında hiç bir değer olmayabilir.
Örneğimizi farklılaştıralım ve bu defa Personeller tablomuzda Muhasebe bölümünde çalışan ve doğum yeri Ankara olan kişiyi arayalım. Almak istediğimiz bilgi ise bu kişinin ad ve soyadı olsun:
txtPersonelAdiSoyadi = DLookup("AdSoyad", "Personeller", "Bolum='Muhasebe' AND DogumYeri='Ankara'")
Burada iki farklı kullanım yöntemimiz eklendi:
a) Metin türünde bilgi aradık yani TcKimlik alanındaki gibi sayı yazmadık. Kriter kısmına değer olarak sayı yazılacak ise aynen yazılır ancak değer metin türünde olacak ise o zaman tek tırnaklar içinde yazmalıyız.
b) Birden fazla kriter ile arama yaptık. İki kriterin ikisininde aradığımız kayıtta kesinlikle olmasını istediğimiz için kriterler arasına AND yazdık. Eğer ki kriterlerden en az bir tanesi uygun olan bir kayıt arasaydık arada OR yazmamız yeterli olacaktı.
Peki burada aradığımız değer sayı veya metin değilde bir tarih olsaydı ne olacaktı?
txtDogumYeri = DLookup("DogumYeri", "Personeller", "DogumTarihi=#1/23/1990#")
Kriter için yazılan değer metin türlerdeki gibi tek tırnak içinde yazılmadı. Yine sayı değerinde olduğu gibi sadece değer de yazılmadı. Tarihlerde dikkat edeceğimiz iki şey var:
a) Tarih değeri # işaretlerinin arasında yazılmalı.
b) Yazım şekli ay.gün.yıl sıralaması ile olmalı.
Peki aldığımız değeri bu şekilde elle değilde form üzerindeki bir metin kutusundan alacak olsak nasıl bir değişiklik olacaktı? Yine metin değerler tek tırnak, tarihler # işaretleri arasında, sayılar ise direkt yazılacaktı. Burada fark eden şey Dlookup fonksiyonunun üçüncü parametresi olan Kriter kısmını parçalara ayırmamız gerekecek. Dlookup fonksiyonunun her üç parametreside çift tırnak içine alınıyor. Kriter parametresinde = işaretinden sonra yazdığımız değer artık formdan geleceği için çift tırnak içinde yazamayız aksi takdirde form üzerindeki denetimin adını metin gibi algılar. Hatalı kullanım şu şekilde:
MsgBox DLookup("AdSoyad", "Personeller", "PersonelId=txtPersonelId")
Form üzerinde yer alan txtPersonelId isimli metin kutusunun içine yazılan değere sahip kayıttaki ad ve soyadı MsgBox komutu ile ekranda göstermek istersek hata alırız. Üstteki komutun doğru yazılışı ise aşağıdaki gibidir:
MsgBox DLookup("AdSoyad", "Personeller", "PersonelId=" & txtPersonelId)
Form üzerindeki metin kutusuna 1 değerini yazdığımda Personeller tablosundaki PersonelId alanındaki değeri 1 olan kayıt varsa geriye AdSoyad alanındaki değeri geri döndürür. MsgBox komutu ile birlikte kullandığım için yukarıdaki örneklerden farklı olarak mesaj kutusu içinde görüntülenir.
Eğer ki metin veya tarih kullanımı olsaydı bu defa tek tırnak veya # işareti kullanmam gerekecekti. Yalnız ilk tırnak veya # üçüncü parametredeki çift tırnaktan önce yazılacaktı fakat ikinci tek tırnak veya # ne olacak? Aşağıda örnek bir yazım şekli görüyorsunuz:
MsgBox DLookup("TcKimlik", "Personeller", "DogumYeri='" & txtPersonelDogumYeri & "'")
İlk tek tırnak = den hemen sonra çift tırnaktan önce yazılıyor. İkinci tek tırnak ise & txtPersonelDogumYeri kısmından sonra gelmeli. Tek tırnak olarak yazacak olursanız Compile Error hatası alırsınız. Bu hatayı önlemek için & birleştirme operatörü ile devam edip iki tane çift tırnak içinde ikinci tek tırnak işareti yazılmalıdır.
Burada her ne kadar Dlookup ile kullanımı anlatmış olsak dahi aynı kullanım şekli Dcount, Dsum, Dmax, Dmin vb. diğer etki alanı fonksiyonlarında da mevcuttur.
Bu yazı içinde anlatılan Dlookup Kullanımı Örneği İndir:
{jd_file file==3}