DAO SayME() : İstenilen Yerdeki Kayıt Sayısını Bulmak
#1
access-sql-10 

SayME: Beni say anlamında bir terimdir VBA'da Dd

Örnek kullanım:
SayME("Kisiler") : Kisiler Tablsunun kayıt sayısını verir.
SayME("Select * Form Kisiler Where Ad='Mehmet'") : Adı Mehmet olan verisetinin sayısını verir.
SayME(yordam) : İlgili yodam sonucu seçilen kayıt sayısını verir.

Visual Basic
  1. Function SayME(strSQL As String) As Long
  2.  
  3. 'ME: AVTdeki istediğiniz tabloların kayıt sayısını döndüren fonksiyondur.
  4. '03.05.2012 21:35
  5. 'Mehmet Eser : eserbilisim.name.tr - access-sql.com
  6. 'AVT: Access Veri Tabanı
  7. 'strSQL yerine tablo adı, yordam veya SQL cümlesi yazabilirsiniz.
  8. 'Fakat bu içerik verileri seçmeye yarayan bir şey olmalıdır.
  9.  
  10. Dim AVT As DAO.Database
  11. Dim veriseti As DAO.Recordset
  12.  
  13. On Error GoTo ErrorHandler
  14.  
  15. Set AVT = CurrentDb
  16.  
  17. Set veriseti = AVT.OpenRecordset(strSQL)
  18.  
  19. If veriseti.EOF Then
  20. SayME = 0
  21. Else
  22. veriseti.MoveLast
  23. SayME = veriseti.RecordCount
  24. MsgBox SayME , vbOKCancel
  25. End If
  26.  
  27. veriseti.Close
  28. AVT.Close
  29.  
  30. Set veriseti = Nothing
  31. Set AVT = Nothing
  32.  
  33. Exit Function
  34.  
  35. ErrorHandler:
  36. MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
  37. End Function


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:
#2
Mehmet Bey değerli paylaşımınız için teşekkür ederim.



  Alıntı
Bu mesajı beğenenler:
#3
Merhaba..

Düşünce çok güzel.. Azminize hayranım ayrıca.. Bir olayın tüm sonuçlarını görmek için ipin ucunu tutmanız yeterli.. Gerisini çekip getiriyorsunuz..

Fonksiyonunuzla ilgili bir kaç öneride bulunayım.. İç parametrede kayıt kaynağı veya sorgu kullanmak işi pratikleştiriyor fakat kriter eklediğimizde Dcount fonksiyonu bi kıt daha öne geçiyor.. Durumu eşitlemek hatta öne geçmek için fonksiyon parametrelerine seçenekli (Optional) kriter koymanızı öneririm..:

Visual Basic
  1. Function SayME(KayitKaynagi As String, Optional alan As String, _
  2. Optional kriter As String) As Long
  3.  
  4. 'ME: AVTdeki istediğiniz tabloların kayıt sayısını döndüren fonksiyondur.
  5. '03.05.2012 21:35
  6. 'Mehmet Eser : eserbilisim.name.tr - access-sql.com
  7. 'AVT: Access Veri Tabanı
  8. 'strSQL yerine tablo adı, yordam veya SQL cümlesi yazabilirsiniz.
  9. 'Fakat bu içerik verileri seçmeye yarayan bir şey olmalıdır.
  10.  
  11. Dim AVT As DAO.Database
  12. Dim veriseti As DAO.Recordset
  13.  
  14. On Error GoTo ErrorHandler
  15. If Nz(alan, "") <> "" Then 'Kriterli..
  16. strSQL = "select count(""*"") from " & KayitKaynagi & _
  17. " where cstr(" & alan & ")= " & "'" & CStr(kriter) & "'"
  18. Else 'Kritersiz.
  19. strSQL = "select count(""*"") from " & KayitKaynagi & ""
  20. End If
  21.  
  22. Set AVT = CurrentDb
  23.  
  24. Set veriseti = AVT.OpenRecordset(strSQL)
  25.  
  26. SayME = veriseti(0)
  27. MsgBox SayME
  28.  
  29. veriseti.Close
  30. AVT.Close
  31.  
  32. Set veriseti = Nothing
  33. Set AVT = Nothing
  34.  
  35. Exit Function
  36.  
  37. ErrorHandler:
  38. MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
  39. End Function



Kriter sayısını çoğaltabilirsiniz de..

Kullanımı..:

Visual Basic
  1. 'Kriterli
  2. Call SayME("tablo/sorgu", "alan", "kriter")
  3.  
  4. 'Kritersiz
  5. Call SayME("tablo/sorgu")







  Alıntı
Bu mesajı beğenenler:
#4
Selamlar, katılımınız ayrıca memnun etti.

SayME = veriseti(0) idadesinin anlamı nedir?

Siz Dcount ile yarıştırıp öne de geçirmişsiniz sağolun. Kodun bitiminde neden geliştiriciler bunu kullansın ki dedim bir SQL cümlesi varken? Cevap: Bu işlev modülde olacağından her seferinde Dcount ya da SQL içinde count kullanmak(sırf bu iş için) zahmetinden kurtaracak. Bir de diğer nesnelerin kayıt kaynağı olan SQL cümleleri hazır oalrak gönderilecek formdan, rapordan ... Fonksiyona kriter ve de alanı ekleyince aslında işlevini daraltıyoruz farkında olmadan. İstenilen türden yapı VBA içinde ya da başka yerde zaten kodlandıktan sonra başka amaçlar için bu fonksiyona gönderilsin diye düşündüm.

Böylelikle alan ve kriter sayıları değişse bile esnek yapı sürekli çalışır halde olacaktı. Kritersiz olup iki alana göre saydırma vb birçok kombinasyon bu sayede mümkün görünüyor. Sorgu adı da yazabiliyoruz zaten mesaja yazmayı unutmuşum.

Sizin düzenlemeniz haliyle Dcount'un papucunu dama attı. Farklı bir bakış ve tarz. Gzüel çözüm. Zaten amaca göre uyarlanırsa kapılar aralanıyor iyice.

Zaten varolan bir tekniği DAO ile eklememin amacı DAO'nun VBA ile çok hızlı çalışmasıdır. Ayrıca her adımda kontrol edebilmesi her şeyi işit atlandırıyor. SQL gibi yerlerde kafamıza yatmayan ne varsa yenisini DAO ile tasarlayabiliyoruz. Belki ondan daha hızlı çalışıyordur. Okunabilirlik açısından da ayrı bir kolaylılığı var ve bir kere yazdıktan sonra her yerde kullanılıyor ve de tüm çağrıları birden değiştiriyor. Yoksa SQL ile yapsak zamanı gelince tüm kdoları arayıp düzeltmeke gerekecek. İleriyi düşünürsek merkezi bir yönetim ipleri elimize veriyor.

SQL kolay gibi görünen zor, DAO zor gibi görünen kolay. Zamanında ADO ile baştan sona bağlantılar oluşturup kayıtları işlerken(ASP dönemi) onu unutup DAO'yla keyf yapacağım aklımın ucundan geçmezdi.

Access şehirse DAO hayattır!
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:
#5
Sayın Mehmet Eser;
Paylaşımınız için teşekkürler..



  Alıntı
Bu mesajı beğenenler:
#6
Alıntı: SayME = veriseti(0) idadesinin anlamı nedir?

Merhaba..

Modülün oluşturduğu sorgu count kullandığımız için tek satır ve tek alan veri döndürür..
veriseti oluşan sorguyu, (0) ise bu ilk alanı ifade eder.. Birden fazla alan olsaydı ve oradaki verileri kullanmak isteseydik 1,2,3.. diye devam edecekti..

Bunu açılan kutu ve liste kutuarı için kullandığımız Column(n) yapısı gibi düşünebilirsiniz..



  Alıntı
Bu mesajı beğenenler:


Foruma Git:


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