Excel Forum

Excel Forum (http://www.excel.web.tr/index.php)
-   Access Dersanesi (http://www.excel.web.tr/forumdisplay.php?f=171)
-   -   Form Üzerinden Filtreleme Yöntemleri 2 (http://www.excel.web.tr/showthread.php?t=73022)

Taruz 13-08-2009 19:13

Form Üzerinden Filtreleme Yöntemleri 2
 
1 Eklenti(ler)
Liste Kutusundaki Verileri Dinamik Filtreleme

Not: Bu konudaki bilgiler ve resimler daha önceki bir paylaşımımdan alıntıdır..


Tekrar merhaba..

Önceki anlatımlarımızda verilerimizi bir ve daha fazla kritere göre filtreleme yöntemlerini işlemeye çalıştık.. Şimdi isterseniz filtreleme konusunu daha ileri seviyeye taşıyalım..

Liste kutusundaki verilerimizi dinamik bir şekilde filtreleyelim..

Listemizin olduğu formu bu şekilde tasarlayalım..:


Amacımız, üsteki metin kutusuna girdiğimiz anahtar harflere uyan kayıtları listelemek.. Mesela Se yazıp entere basınca ismi Se ile başlayan personeli listede görmek istiyoruz. Ya da sadece, ismi MEHMET olan personelleri listelemek istiyoruz..

Bu işlemi yapacak deyimi yazmak için listenin kaynağı sorguyu tasarım görünümünde açalım..

Önce Adı ve Soyadı alanlarını tek alanda birleştirelim..:

Kod:

[Ad] & " " & [Soyad]



Alan adını da İsim yapalım..

http://www.taruz.net/konuresimleri/f2.jpg

Şimdi bu alanın ölçüt kısmına şartımızı yazalım.. Diyelim ki:

Formdaki isim metin kutusuna yazdığım kelime ile başlayan isimleri süz..

Bu sorgunun anlayacağı şekilde yazacak olursak..:

Kod:

Like [Forms]![FormA]![Açılan Kutu2] & "*"
Burada gördüğünüz gibi Like (Buradaki Türkçe karşılığı, "benzer, benzeri, -miş gibi") işlecinden faydalandık.. Formdaki metin kutusuna yazdığımız değerin sonuna birleştirme operatörü (&) ile de * (yıldız) ile ilave ederek yazılan kelimeler ile başlayan tüm isimlerin sıralanmasını sağladık..:



Metin kutusunun güncelleştirme sonrasında olayına listeyi yeniden sorgulayan kodu yazmayı unutmayalım..:


Kod:

Me.Liste8.Requery



Şimdi ölçütümüze küçük bir ilave yaparak sadece metin kutusuna yazdığımız kelime ile başlayanları değil, bu kelimeyi içerisinde barındıran kayıtları da listeleyelim..

Bunu yapmak için ölçütümüzün sonuna ilave ettiğimiz * karakterini başına da yazalım..:


Kod:

Like "*" & [Forms]![FormA]![Açılan Kutu2] & "*"



Yukardaki resimde gördüğünüz ad olarak girdiğimiz kriterin verdiği sonuçlar şimdi daha da çoğaldı.. Sadece ad ile başlayan değil içerinde ad ifadesi geçen (FADİME BAL, ZÜLFİKAR YADİGAR vb.) tüm kayıtlar listelendi..:



Bir sonraki konuda, bu yöntemi bir ileri seviyeye taşımayı göreceğiz.. Şimdilik hoşçakalın.. http://www.access-sql.com/images/smilies/merhaba.gif

Taruz..

Taruz 13-08-2009 19:18

1 Eklenti(ler)
Liste Kutusundaki Verileri Dinamik ve Hızlı Bir Şekilde Filtreleme

Merhaba..

Bir önceki çalışmamızda hatırlarsanız form üzerindeki bir metin kutusuna girdiğimiz kelimeyi Personel İsmi içinde barındıran kayıtları filtrelemiştik..

Şimdi bunu bir ileri safhaya taşıyalım ve metin kutusuna harfleri yazdıktan sonra değilde yazdığımız sırada listedeki kayıtlar da filtrelensin..

Bu işlemin, daha önce ActiveX texbox nesnesi ile yapılmış örneklerini görmüş olabilirsiniz.. Bu OLE nesnesine girilen harfler değiştikçe(arttıkça) listedeki verilerde oluşan bu metine göre değişiyor ve yeniden süzülüyor.. (tabi kodlar ve deyimler ilave ederek)

Biz, şimdi hiçbir OLE nesnesi kullanmadan ve de çok daha pratik şekilde bu işlemi yapacağız..

Önce Listemizin ve Metin Kutumuzun olduğu formumuzu tasarımda açalım..

Form üzerine Araç Kutusundan yeni bir metin kutusu (metin5) koyalım.. Biçim özelliklerinden Görünür seçeneğini Hayır olarak değiştirelim..

Sonra kayıt arama-filtreleme için kelimeler gireceğimiz metin kutusunun (metin1) Olay / Değiştiğinde





yordamına şu kodu yazalım..:



Kod:

Dim Bul As String
Kod:

Bul = metin1.Text
Me.Metin5.Value = Bul




Bu kod metin1 (arama-filtreleme için anahtar kelimeleri yazdığımız metin kutusunun adı) metin kutusuna yazdığımız değerleri daha önce gizlediğimiz Metin5 metin kutusuna yazdırıyor.. Harfler çoğaldıkça yani metin1 değiştikçe Metin5 de aynı değeri alıyor..

Şimdi yazdığımız değeri taşıyan bu metin kutusunu listemizin sorgusuna ölçüt göstereceğiz..

Sorgumuzu tasarımda açalım ve İsim alanının ölçütüne bir önceki bölümde işlediğimiz gibi Like işleci yardımı ile kriterimizi yazalım..


Son olarakta her yeni harfi girdikten sonra listeyi tekrardan sorgulamak için yukarıdaki kodun sonuna



Kod:

Me.Liste8.Requery




ekleyelim..


Artık arama kutusuna her harfi yazdığımız anda liste oluşan harf kümesine- kelimeye göre filtreleniyor..

Durun! unuttum. http://www.access-sql.com/images/smilies/trz2/wink.gif Yeni bir arama için kutuyu boşaltacak bir düzenek yapalım bir de..

Hemen forma bir düğme koyalım ve Tıklandığında Olay Yordamına şu kodu yazalım..:



Kod:

Me.metin1 = ""
Kod:

Me.Metin5 = "" Me.Liste8.Requery










Bir sonraki bölümde olayı abartalım ve tek metin kutusundan birden fazla alandaki verileri filtreleyelim.. http://www.access-sql.com/images/smilies/trz2/wink.gif Hatta bunu filtrelemek istediğimiz alanı seçerek yapalım.. http://www.access-sql.com/images/smilies/trz2/wink.gif


Taruz..

Taruz 13-08-2009 19:26

1 Eklenti(ler)
Kayıtları Alana Göre Seçerek Dinamik ve Hızlı Bir Şekilde Filtreleme


Merhaba.. http://www.access-sql.com/images/smilies/trz2/smile.gif

Hatırlarsanız, son bölümde arama kutusuna yazdığımız her harfin sonrasında listedeki İsim alanının, oluşan bu harf kümesine göre mütemadiyen filtrelenmesi işlemini yapmıştık..

Şimdi bu sistemi daha da geliştirelim ve bir tek alanı değil, birden fazla alanı seçim yaparak filtreleyelim..

Şimdi üzerinde listemizin ve onu filtrelememize yardımcı olacak metin kutumuzun olduğu formumuzu tasarım görünümünde açalım.. Sonrasında Araç Kutusundan Seçenek Grubu seçelim..


Bu seçenek grubu yardımı ile filtrelemek istediğimiz alanların seçimini yapacağız..

Evet, Araç Kutusundaki Seçenek Grubuna tıkladık ve Denetim Sihirbazının karşımıza çıkarttığı ilk ekrana filtrelemek istediğimiz alanları tanımlayacak isimleri yazalım..


Varsayılan seçimi, en sık arama yapacağımız alan olacağını düşündüğümüz İsim olarak belirleyelim..


Burada, seçtiğimiz alan hangisi ise onun karşılığında alacağı değeri belirliyoruz.. Bu değeri daha sonra sorguda şart olarak kullanacağız.. Sayı olması tercihtir..


Sonraki pencerede seçenek grubumuzun biçimini özelleştiriyoruz..


Bu pencerede de seçenek kutumuza isim veriyoruz.. Hızlı Arama diyelim http://www.access-sql.com/images/smilies/trz2/wink.gif


Son deyip formumuzun uygun bir yerine konuşlandıralım..


Şimdi Seçenek Grubumuz hazır. Bundan sonra yapmamız gereken 7. Bölümde yaptıklarımıza benzer..:

Forma bir tane daha metin kutusu(metin5) ekliyoruz ve Biçim / Görünür Özelliğini Hayır olarak değiştiriyoruz.. Hemen ardından arama yaptıracağımız metin kutusunun(metin1) Olay / Değiştiğinde yordamına, yazdığımız harfleri sorgumuza kriter olarak göstereceğimiz görünmez metin kutumuza aktaracak ve sonrasında listemizi yeniden sorgulayacak olan şu kodu yazıyoruz..:

Kod:

Dim Bul As String
Bul = metin1.Text
Me.Metin5.Value = Bul
Me.Liste8.Requery






Formumuz artık hazır sayılır.. Şimdi sırada listemize kaynak gösterdiğimiz sorgumuzu yapmak istediğimiz filtrelemeye göre hazırlamak var..



Sorgumuza şöyle bir kriter yazmalıyız; demeliyiz ki..:

Arama-filtreleme kutusuna yazdığım her kelime sonrasında seçenek grubunda İsim seçiliyse İsim alanında, Departman seçili ise Departman alanında, İl seçili ise İller alanında arama-filtreleme yap..

Peki bunu nasıl yapacağız? Elimizde bir tane arama kutusu var ama oluşan kriteri atayacağımız üç ayrı alan var. Seçeneğe göre kutuyu bir o alanın bir bu alanın ölçütüne koyamayacağımıza göre farklı bir yol uygulamamız gerek..

Seçenek grubunu oluştururken atadığımız değerler işte burada işe yarayacak.. http://www.access-sql.com/images/smilies/trz2/wink.gif

Hemen sorgumuzdaki boş bir alana gidelim ve şu mantıkta bir deyim yazalım..

Bu alanda, seçenek grubunda İsim seçiliyse İsim, Departman seçili ise Departman, İl seçili ise İller alanının verilerini göster..

Bunu mantığı SQLe çevirmek için daha önceki bölümlerde olduğu gibi iç içe IIF fonksiyonunu da kullanabiliriz ama burada aynı amaçla kullanabileceğimiz ve kullanımı iç içe IIF kullanmaktan daha kolay olan Switch fonksiyonundan faydalanıp deyimi şu şekilde oluşturalım..

Kod:


 
Switch
          (
            [Forms]![FormA]![secenek]=1;[Ad] & " " & [Soyad],
              [Forms]![FormA]![secenek]=2;[Departman],
                [Forms]![FormA]![secenek]=3;[Iller] )




Dikkatli bakınca seçenek grubunu oluştururken belirlediğimiz sayısal değerleri yukarıdaki küme içinde kullandığımızı göreceksiniz..

Artık formdaki seçeneğe göre filtre uygulayacağımız alanımızı oluşturmuştuk olduk.. Hemen Ölçüt bölümüne hazırlanışını önceki konularda işlediğimiz Like işleci ile oluşturduğumuz kriterimizi yazalım..



Sorgumuzu artık tüm şartlara göre hazırlamış olduk..

Şimdi formumuzu yeniden tasarım görünümünde açalım ve yeni bir arama için kutuyu boşaltacak bir düzenek yapalım..
Formun üstüne bir düğme koyalım ve Tıklandığında Olay Yordamına


Kod:

Me.metin1 = ""
Me.Metin5 = ""
Me.Liste8.Requery

yazalım..

Eveeet artık formumuz harika bir filtreleme özelliğine sahip oldu.. http://www.access-sql.com/images/smilies/trz2/wink.gif



Sevgili access dostları; Form Üzerinden Filtreleme başlığı altında, bölüm bölüm, basit yöntemlerden daha kapsamlı yöntemlere doğru sorgu ile filtreleme yapma tekniklerini anlatmaya çalıştım.. Sürçü lisan ettiysem affola..

Bir sonraki çalışmada görüşmek üzere.. Saygı ve sevgiyle http://www.access-sql.com/images/smilies/merhaba.gif

Taruz..


Not: Bu konudaki bilgiler ve resimler daha önceki bir paylaşımımdan alıntıdır..

assenucler 13-08-2009 19:33

Sayın Taruz;

İyi akşamlar.

Bu güzel çalışma ve paylaşımınız dolayısıyla sizi kutlar..

Selam ve sevgilerimi sunarım...

İsmail Küçükşengün 14-08-2009 08:04

Sayın Taruz hocam;

Gerçekten bir ders mahiyetindeki anlatım ve paylaşımlarınız bir harika.

Çok teşekkürler.Selamlar.

BKCAN 14-08-2009 11:07

emeginize sağlık Sayın Taruz

aydın3838 16-09-2009 22:17

sayın taruz bey öncelikle yapılan çalışmalarınız için teşekkürler

ben veri tabanı olarak acces kullanmaktayım formlarım ve çalışmalarım tümüyle exceldedir

bu yapmış olduğunuz sorgulama yı excelde formla yapmak istiyorum

acces veri tabanında sorgulamalarım mevcut accesde bu anlattıklarınızın hepsını yapabiliyorum

fakat userformdada yapmam için sorgulama ekranındaki
sorgu texti ni userformda nasıl kullanabilirim

yardımcı olursanız sevinirim saygılar

Taruz 17-09-2009 03:47

Alıntı:

aydın3838 tarafından gönderildi (Mesaj 405365)
sayın taruz bey öncelikle yapılan çalışmalarınız için teşekkürler

ben veri tabanı olarak acces kullanmaktayım formlarım ve çalışmalarım tümüyle exceldedir

bu yapmış olduğunuz sorgulama yı excelde formla yapmak istiyorum

acces veri tabanında sorgulamalarım mevcut accesde bu anlattıklarınızın hepsını yapabiliyorum

fakat userformdada yapmam için sorgulama ekranındaki
sorgu texti ni userformda nasıl kullanabilirim

yardımcı olursanız sevinirim saygılar

Merhaba sn. aydın3838..

Yukarıda anlattığım filtreleme şekillerini Excele adepte edilmesi konusunda çok bilgim yok..
Vt'yi excele bağlayıp filetreleme işlemlerinin Excelde yapılması gerek sanırım.. Access dosyasında yapılan, yukarada anlatılan türde bir filtrelemenin Excel dosyası ile etkileşimli çalışabileceğini sanmıyorum.. Yine de bu sorunuzu değerli Excel uzmanlarımıza yöneltirseniz daha net bir bilgi alabilirsiniz diye düşünüyorum..

Saygılar..

erkankamilonas 02-11-2009 15:48

Sayın Taruz gerçekten çok faydalı bilgiler. Teşekkür ederiz.

Arkadaşın sorusunda gelince;
Sorgularınız Formdaki nesnelerin Change olayına veya atadığınız bir butona bağlamanız ve şartlar kısmında (Where'den sonraki alana) '" & [nesnjenin adının buraya yazılması gerekir.] & "' belirtmeniz gerekir.

Ama VT Acces iken Excel ve Formlar ile VTabanına bilgi göndermek silmek güncellemek sizi yoracak ve sonuca ulaşmanızı geciktirecektir.

fox35 12-02-2010 10:28

çok teşekkürler dostum ışığınla aydınlandık ellerin dert görmesin.


Saat 13:17

Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.