Dcount Fonksiyonu
#1
Merhaba..

Accesste sık kullandığımız fonksiyonlardan biri de DCount fonksiyonudur.. Özelliği, bir kayıt kümesine bağlı bir alanda bulunan kayıtların sayısını belirler.. Bu fonksiyonu sorguda ve VBA editöründe kullanabileceğimiz gibi form üzerindeki bir denetimde de kullanabiliriz..

Yapısı şu şekilde..:


DCount("ifade/alan", "etkialanı/kayıt kümesi", "kriterler")


İlk kısım yani ifade/alan, kayıt saydıracağımız alanı ifade eder.. Bu kısmı boş bırakamayız.. Bu kısım tablodaki bir alan olabileceği gibi sorguda bulunan bir alan da olabilir.. Sorguda hesaplanarak elde edilmiş (Kalan:[Alınan]-[Verilen] gibi..) veya mevcut alanların dışında oluşturulmuş ifadeleri de kullanabiliriz..

Bu kısımda ayrıca yıldız ( * ) yani joker karakterini de kullanabiliriz.. Fonksiyon bu durumda alanın değil, kayıt kümesinin (tablo veya sorgu) kayıt sayısını, alanların boş veya dolu olup olmadığına bakmaksızın sonuç verir..

etkialanı/kayıt kümesi, ilk bölümdeki ifade ya da alanın bulunduğu tablo veya sorguyu ifade eder.. İsmini bu kısma yazacağız.. Bu kısmı boş geçemeyiz.. Şunu da unutmadan not düşelim, bu kayıt kaynağı eğer sorgu ise harici parametre istemeyen bir sorgu olmalı.. Parametre kaynağı kapalı sorgularda hata döndürür.. Örneklersek; ölçütünü form1 deki bir metin kutusundan alan bir sorgudan DCount ile bir değer almak istiyorsak form1 açık olmalı..

kriterler bölümü zorunlu değil. Bu kısmı oluşturmadan yazacağımız deyimler kayıt kümesindeki tüm kayıtlar üzerinden sonuç verir.. DCount fonksiyonu genelde kritersiz kullanılmaz zaten.. Bu nedenle bu kısmı biraz açalım..

Kriteri uygulayacağımız alan, ikinci kısımda işlediğimiz alan ya da sorguda varolan bir alan olmalı..

Bu kısımda birden fazla alan ve bununla ilişkili kriter kullanabiliriz.. Örnekleyelim..:

Amacımız bir formda bulunan metin1 isimli metin kutusuna Ürünler tablosundaki  Türü alanında bulunan kayıtların sayısını saydırmak..

Önce fonksiyonumuzun ilk iki kısmını oluşturalım..

Visual Basic
  1. =DCount("Tur";"Urunler")



Kriter kısmını yazmadığımız için Urunler tablosundaki Tur alanında veri olan kayıtların sayısını aldık..

Bu kısımda şunu da açıklamak lazım.. Bu fonksiyonu form içindeki bir nesnede kullandığımızda başına ( = ) eşittir koymamız gerekir.. Ayrıca kısımları ayıran ( , ) virgül yerine ( ; ) noktalı virgül kullanmalıyız.. (Fonksiyon sorgu içinde kullanılıyorsa da noktalı virgül olmalı)

Şimdi fonksiyona kriter vererek Adı Elma olan kayıtların sayısını öğrenelim..


Visual Basic
  1. =DCount("*";"Urunler";"Adi= 'elma' ")



Burada ölçüte aynı tablodaki Adi alanını koyduk ve bize adı elma olan kayıtların sayısını vermesini istedik..

Ölçütte dikkat etmemiz gerek bir önemli nokta da ölçütte kullandığımız tırnaklardır.. Ölçütü sadece elma olarak yazmış olsaydık fonksiyon bunu bir denetim olarak kabul edecek ([elma]) ve türünü çözemeyecekti.. Biz elma kriterinin başına ve sonuna ( ' ) tek tırnak koyarak ölçütün bir denetim olmadığını ve metin veri türünde olduğunu fonksiyona izah ettik..  

Ölçüte vereceğimiz sayısal değerlerde (bu ölçüt bir denetimden gelmiyorsa tabii) tırnak kullanmamıza gerek yok.. Örnekleyelim hemen..:

Ürün numarası 2 olan ve Adı alanında kayıt olan ürünümüzün tablomuzdaki sayısını şöyle alıyoruz..

Visual Basic
  1. =DCount("Adi";"Urunler";"UrunId= 2")



Burda da sayısal değeri tırnak koyarak çağıralım..

Visual Basic
  1. =DCount("Adi";"Urunler";"UrunId= " & 2)



Görüldüğü gibi sayısal değerlerde ( " ) çift tırnak kullanıyoruz..

Ölçütümüzü form üzerindeki bir metin kutusuna (ismine metin2 diyelim) yazıp fonksiyona buradan da verebiliriz.. Şöyle ki;

Visual Basic
  1. =DCount("Adi";"Urunler";"UrunId=" & [metin2])



Ölçütle tırnağın birleşimin şekline dikkat!

Ölçütümüz metin türünde, yani ilk verdiğimiz elma örneğimizdeki gibi olsaydı tırnakları bu şekilde kullanmamız gerekirdi..:

Visual Basic
  1. =DCount("Tur";"Urunler";"Adi= '" & [metin2] & "' ")




Şimdi kriter kısmını biraz daha geliştirelim..

UrunAlıs tablosunda, UrunId numarası 2 olan üründen 20.10.2009 tarihinde kaç defa kayıt girilmiş olduğunu bulalım..

Visual Basic
  1. =DCount("Alinan";"UrunAlim";"UrunId= 2 and AlimTarih= #20-10-2009#")



Ölçütleri şimdi de metin kutularından çağıralım;


Visual Basic
  1. =DCount("Alinan";"UrunAlim";"UrunId=" & [metin2] & " and AlimTarih=#" & Format([metin3];"dd-mm-yyyy") & "#")



Burada dikkat ettiyseniz tarih alanının biçimini değiştirdik.. Sebebi DCount fonksiyonun tarih biçimini gün, ay ve yılı aralarında ( - ) olarak istemesi.. Tabii bu durumu denetimlerin ya da alanların biçimini değiştirerek de düzeltebiliriz..

Tarih ölçütüyle bilinmesi gereken diğer ayrıntı da diğer tüm fonksiyonlarda olduğu gibi tarihi belirtecek ( # ) diyez işareti ile kullanılması gerektiğidir..

Kriter sayısı 2 den fazla olabilir.. Bu konuda kıstlamanız yok..

Şimdi tüm bu kullanım şekillerini VBA için de hazırlayıp, burada nasıl kullanılacağını göstererek bir yerde özet çıkartmış olalım ve de konumuzu tamamlayalım..



Visual Basic
  1. 'Kritersiz kullanım
  2. Me.Metin1 = DCount("*", "Urunler")
  3.  
  4. 'Metin türünde bir kriter uyguladık..
  5. Me.Metin1 = DCount("*", "Urunler", "Adi= 'elma' ")
  6.  
  7. 'Metin türünde bir kriteri formdaki denetimden verelim..
  8. Me.Metin1 = DCount("Tur", "Urunler", "Adi= '" & [metin2] & "' ")
  9.  
  10. 'Sayısal türdeki bir kriteri formdaki denetimden verelim..
  11. Me.Metin1 = DCount("*", "Urunler", "UrunId=" & [metin2])
  12.  
  13.  
  14. 'Sayısal ve Tarih türünde iki ayrı kriteri aynı anda kullanalım..
  15. Me.Metin1 = DCount("Alinan", "UrunAlim", "UrunId= 2 and AlimTarih= #20-10-2009#")
  16.  
  17.  
  18. 'Sayısal ve Tarih türündeki iki kriteri formdaki denetimlerden verelim..
  19. Me.Metin1 = DCount("Alinan", "UrunAlim", _
  20. "UrunId=" & [metin2] _
  21. & " and AlimTarih=#" & Format([metin3], "dd-mm-yyyy") & "#")







  Alıntı
Bu mesajı beğenenler: hakanuss
#2
Teşekkürler Sayın Taruz hocam.



  Alıntı
Bu mesajı beğenenler:
#3
Yerie göre büyük dertlerden kurtaran bir işlev. Bağlanmadan, selam vermeden alacağını alıp çıkan bir komut.

Teşekkürler. Bazen varlığından haberdar etmek bile yetiyor böyle şeyleri.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#4
Sn Taruz hocam verdiğiniz emek ve bilgi için teşekkürler. Keşke her konuyu böyle anlatma imkanınız olsa... Saygılarımla.



  Alıntı
Bu mesajı beğenenler:
#5
Sayın Taruz hocam;

İyi akşamlar ve hafta sonu...

Bir fonksiyon ancak bu kadar güzel ve anlaşılabilir biçimde anlatılabilir... Emek ve katkınız için teşekkür...

Selam ve sevgiler..



  Alıntı
Bu mesajı beğenenler:
#6
sn Taruz hocam,

bu foksiyonu yaptığım çalışmalarda kullanıyordum ancak ne, nasıl vb soruların cevabını bilmeden sayenizde bundan sonra ne, nasılın gibi soruların cevaplarını bilerek kullanacağım,

emeğinizden dolayı teşekkürler...

hocam yeri olmadığını biliyorum ancak merak ettiğim iki foksiyon var Unsure

IIf([Formlar]![analiz]![YIL]>"";[Formlar]![analiz]![YIL];[tblanaliz]![YILI])

IIf(Len([Formlar]![analiz]![ILI])<>0;[Formlar]![analiz]![ILI];[tblanaliz]![IL])

bunlarıda boş vaktinizde, başka bir konu başlığında açıklama imkanı bulabilirseniz.... Memnun edersiniz.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
access-sql-6 Dsum Fonksiyonu Taruz 44 28.125 21-03-2024, 09:00
Son Mesaj: halil.tefci
access-sql-19 Dlookup Fonksiyonu Taruz 73 57.261 25-02-2022, 23:15
Son Mesaj: metınaycıcek
access-sql-7 Nz Fonksiyonu Taruz 21 21.082 10-07-2020, 13:32
Son Mesaj: bysea

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi