Gelişmiş Filtreleme Çok Değişkenli
#1
Merhabalar. Excel + acesss ile hazırladığım programda; 
Bu sorgulama şeklinde şunu yapmak istiyorum. sayfada toplam 28 adet optionbuttton var. Ben rastgele bazen 2, bazen 5 bazen de 10 adet
optionbuttonu seçip SORGULA tuşuna basınca seçili verilere göre fitreleme yapsın ve sonucunu listbox a göstersin istiyorum.
Şöyle bir yol var aklımda ama çoooook uzun geldi. 28 seçenek var. İf elseif,elseif ile yapılabilir. Ama mesela sadece 28 adet kriterden 1 tanesine göre filtreleme yapmak için 28 adet elseif, 
2 tanesi seçilince 3 tanesi seçilince 4-5-6 tanesi seçilince derken binlerce elseif kullanmam gerekli

gibi geldi ve bu sorunu çözemedim !
 Yardımcı olur musnuz
' ÖRNEK 1: İçmesuyu deposu olan, fayansı olmayan, şebekeli, kanalizasyonu olan, asfaltı olmayan ları sorgula
' ÖRNEK 2: Suyu yeterli ve asfaltı olmayanları Sorgula

Excel dosyası : https://dosya.co/ucevqtth9f2z/Program.xlsm.html
Access dosyası : https://dosya.co/4t3m5kk134s5/UF.accdb.html

Not. Programın çalışabilmesi için iki dosya da aynı klasörde olmalı !



  Alıntı
Bu mesajı beğenenler:
#2
bu tür fil,treleme olaylarında elsef kullanmak zorunda değilsin, sorgu ile yapabilirsin bu tür örnekler sitede var "filitreleme "olarak kelime aratırsan örnekler bulabilirsin
ayrıca excel ile neden kullanıyorsun anlamadım acces yeter diye düşünüyorum.
kolay gelsin



  Alıntı
Bu mesajı beğenenler: toprak2349
#3
aşağıdaki kod işinize yarayabilir
ben temel mantığını oluşturmaya çalıştım 1 metin kutusuyla 2 seçenek kutusu için verdim diğer alanlar da buna benzer şekilde olacak
Kod:
Dim baglan As New Connection
Dim rs As New Recordset
Dim txtOlcut As String
If Me.Cb7_Köy <> "" Then txtOlcut = txtOlcut & " and koy='" & Me.Cb7_Köy.Value & "'"
If Me.OptionButton1 = True Then txtOlcut = txtOlcut & " and merkez_mahalle='Merkez'"
'
'buralara diğer alanlar
'
If Me.OptionButton23 = True Then txtOlcut = txtOlcut & " and asfalt='Var'"
If Me.OptionButton24 = True Then txtOlcut = txtOlcut & " and asfalt='Yok'"
'
'diğer alanlar
'
txtOlcut = Mid(txtOlcut, 4)  ' en başa eklediğimiz fazladan " and " çıkarmak için
baglan.Open "Provider=Microsoft.Ace.Oledb.12.0;data source= " & ThisWorkbook.Path & "\UF.accdb;"
rs.Open "select * from envanter where " & txtOlcut, baglan, adOpenKeyset, adLockPessimistic

If rs.Fields(0) = "" Then
    Me.Lb7_Sonuçlar.Clear
    Me.La7_Sonuç.Caption = "Kayıt Bulunamadı !"
    MsgBox "Belirttiğiniz Kriterlere Göre Veri Bulunamadı !", vbCritical, "HATA MESAJI !"
    Exit Sub
Else

    With Me.Lb7_Sonuçlar
        .ColumnCount = 19
        .ColumnWidths = "0;70;0;60;45;60;45;50;45;45;60;60;55;45;50;45;50;50;45"
        .Column = rs.GetRows
    End With
    UF.La7_Sonuç.Caption = UF.Lb7_Sonuçlar.ListCount & " Adet Kayıt Mevcut"

End If

rs.Close
baglan.Close



  Alıntı
Bu mesajı beğenenler: toprak2349
#4
(12-07-2019, 23:28)celalll demiş ki: bu tür fil,treleme olaylarında elsef kullanmak zorunda değilsin, sorgu ile yapabilirsin bu tür örnekler sitede var "filitreleme "olarak kelime aratırsan örnekler bulabilirsin
ayrıca excel ile neden kullanıyorsun anlamadım acces yeter diye düşünüyorum.
kolay gelsin

Aslında programı şu şekilde kullanmayı düşündüğüm için excel+acess birlikte kullanıyorum. 
access dosyası ortak interneti kullanan 3-4 bilgisayarın paylaşılan klasörüne atacağım. Her bir bilgisayarda da excel olacak yani program arayüzü. Tüm kullanıcılar yapılan değişikliği aynı anda görebilsin, verikaydında yapılan değişiklikler eklemeler, çıkarmalar vb. 
Yani daha bunu denemedim ama çalışır diye düşünüyorum ! Sizce de bu şekilde çalışır mı ?
Bir de sadece access da tasarlansa program ne gibi avantajları olur ?



  Alıntı
Bu mesajı beğenenler:
#5
sayın @toprak2349 aynı mantığı Accesste de kullanabilirsiniz. tabloları ve geri kalanları ayırabilirsiniz
ana tablo sunucuda kalır arayüzün olduğu access bütün kullanıcılara dağıtılır



  Alıntı
Bu mesajı beğenenler: toprak2349
#6
(13-07-2019, 11:05)halily demiş ki: aşağıdaki kod işinize yarayabilir
ben temel mantığını oluşturmaya çalıştım 1 metin kutusuyla 2 seçenek kutusu için verdim diğer alanlar da buna benzer şekilde olacak
Kod:
Dim baglan As New Connection
Dim rs As New Recordset
Dim txtOlcut As String
If Me.Cb7_Köy <> "" Then txtOlcut = txtOlcut & " and koy='" & Me.Cb7_Köy.Value & "'"
If Me.OptionButton1 = True Then txtOlcut = txtOlcut & " and merkez_mahalle='Merkez'"
'
'buralara diğer alanlar
'
If Me.OptionButton23 = True Then txtOlcut = txtOlcut & " and asfalt='Var'"
If Me.OptionButton24 = True Then txtOlcut = txtOlcut & " and asfalt='Yok'"
'
'diğer alanlar
'
txtOlcut = Mid(txtOlcut, 4)  ' en başa eklediğimiz fazladan " and " çıkarmak için
baglan.Open "Provider=Microsoft.Ace.Oledb.12.0;data source= " & ThisWorkbook.Path & "\UF.accdb;"
rs.Open "select * from envanter where " & txtOlcut, baglan, adOpenKeyset, adLockPessimistic

If rs.Fields(0) = "" Then
   Me.Lb7_Sonuçlar.Clear
   Me.La7_Sonuç.Caption = "Kayıt Bulunamadı !"
   MsgBox "Belirttiğiniz Kriterlere Göre Veri Bulunamadı !", vbCritical, "HATA MESAJI !"
   Exit Sub
Else

   With Me.Lb7_Sonuçlar
       .ColumnCount = 19
       .ColumnWidths = "0;70;0;60;45;60;45;50;45;45;60;60;55;45;50;45;50;50;45"
       .Column = rs.GetRows
   End With
   UF.La7_Sonuç.Caption = UF.Lb7_Sonuçlar.ListCount & " Adet Kayıt Mevcut"

End If

rs.Close
baglan.Close

Çok teşekkür ederim hocam. Bu kod işime yaradı.  Birşey daha sorabilir miyim ? şöyle bir hata çıkıyor nasıl engelleyebilirim ?
Yıl verisi sayı olacağı için rs.open kısmında debug hatası veriyor nasıl engelleyebilirim ? Yani yıl sorgusunu da nasıl rs ye ekleyebilirim ?


Kod:
Dim txtOlcut As String

If Me.Tb7_DYıl <> "" Then txtOlcut = txtOlcut & " and depoyili='" & Me.Tb7_DYıl.Value & "'"

txtOlcut = Mid(txtOlcut, 5)  ' en başa eklediğimiz fazladan " and " çıkarmak için

baglan.Open "Provider=Microsoft.Ace.Oledb.12.0;data source= " & ThisWorkbook.Path & "\UF.accdb;"
rs.Open "select * from envanter where " & txtOlcut, baglan, adOpenKeyset, adLockPessimistic



  Alıntı
Bu mesajı beğenenler:


Foruma Git:


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