AccessTr.neT
Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı (/konu-cok-kriterli-form-filtresi-uygulamada-opsiyonel-degisken-kullanimi.html)



Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - tarkanaykın - 16/04/2022

düzeltiyorum, sayın berduş hocamın verdiği kod gayet işimi gördü onu uyarlayınca işim tamam, ama yine de bu tarz yapabilir miyim diye sormaktan kendimi alamadım, aşağıda...


merhaba değerli arkadaşlar, and bağlacı ile çok kriterli form filtresi uygulamada sıkıntım yok ama o kriterlerin hepsinin opsiyonel olmasını istiyorum çünkü normal and bağlacıyla yaptığımdan, diyelimki ben o an, iki kriterli filtre uygulamak istiyorum, sadece ikisini baz alsın, üç olunca üçünü.... yani şöyle ; diyelimki beş değişkenli , and bağlcıyla bağlanmış bir filtre stringim var, icabında ikisini seçeyim diyorum diğerleri de değer beklediğinden hata veriyor, bu konuda çok düşündüm bi sonuca varamadım, yardımcı olur musunuz?

Dim a As String
Dim b As Variant
Dim c As Variant

a = Me.acilan.Column(1)
b = Me.tarih1.Value
c = Me.tarih2.Value

Call suz(a, b, c)


Function suz(Optional sinif As String, Optional tarih1 As Variant, Optional tarih2 As Variant) As Variant
Me.surecAltForm.Form.Filter = "siniflar.sinifAdi='" & sinif & "'" & " And " & "'" & [islemTarihi] & "'  Between #" & Format(tarih1, "mm\/dd\/yyyy") & "# And #" & Format(tarih2, "mm\/dd\/yyyy") & "#"

Me.surecAltForm.Form.FilterOn = True



End Function


RE: Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - berduş - 17/04/2022

temel mantık aynı bu sefer metin kutularının adı yerine atama yaptığınız değişkenler kullanılacak
If Len(Me.acilan.Column(1) & "") > 0 Then StrFiltre = " and [siniflar.sinifAdi]='" & Me.acilan.Column(1) & "'"
If Len(Me.tarih1 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]>=" & CLng(Me.tarih1)
If Len(Me.tarih2 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]<=" & CLng(Me.tarih2)
StrFiltre = Mid(StrFiltre, 6)
Me.surecAltForm.Form.Filter = StrFiltre
Me.surecAltForm.Form.FilterOn = True
yerine
Sub suz(Optional sinif As String, Optional tarih1 As Variant, Optional tarih2 As Variant)
StrFiltre = ""
If Len(sinif & "") > 0 Then StrFiltre = " and [siniflar.sinifAdi]='" & sinif & "'"
If Len(tarih1 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]>=" & CLng(tarih1)
If Len(tarih2 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]<=" & CLng(tarih2)
StrFiltre = Mid(StrFiltre, 6)
Me.surecAltForm.Form.Filter = StrFiltre
Me.surecAltForm.Form.FilterOn = True

End Sub
function yerine sub kullanabilirsiniz
fonksiyon çıktı alır burada çıktı yok eylem var o nedenle sub tercih edilmelidir


RE: Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - tarkanaykın - 17/04/2022

çok teşekkür ederim sayın berduş, sub uyarısı için de ayrıca teşekkürler, verdiğiniz kodun işleyiş mantığını çözdüm de yalnız şu StrFiltre = Mid(StrFiltre, 6) ne anlam taşıyor, işlevini biliyorum da diğer kodlarla ne alakası var onu da öğrenebilir miyim? yanlış bilmiyorsam stringin ortasından itibaren 6 tane alıyor ama ne alıyor niçin alıyor? ya da eksik mi biliyorum?


RE: Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - berduş - 17/04/2022

If Len(sinif & "") > 0 Then   StrFiltre =                 " and [siniflar.sinifAdi]='" & sinif & "'"
If Len(tarih1 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]>=" & CLng(tarih1)
If Len(tarih2 & "") > 0 Then StrFiltre = StrFiltre & " and [surec.İslemTarihi]<=" & CLng(tarih2)


kodlara dikkat ederseniz hepsinin başına and eklenmiş 
ilk and fazladan onu silmek için ilk 5 karakteri koşuldan çıkarmak gerek yoksa sorgu hata verir
eğer ilk and çıkmazsa kriter aşağıdaki gibi alınır

" and [siniflar.sinifAdi]='sınıf'"  & " and [surec.İslemTarihi]>=tarih and [surec.İslemTarihi]<=tarih"
Mid(StrFiltre, 6) ile and silinince
"[siniflar.sinifAdi]='sınıf'"  & " and [surec.İslemTarihi]>=tarih and [surec.İslemTarihi]<=tarih"


RE: Çok Kriterli Form Filtresi Uygulamada Opsiyonel Değişken Kullanımı - tarkanaykın - 17/04/2022

eyvallah, anladım bunu bir kenara not etmeye gerek yok çünkü mantığını anladım, sadece dikkat edilmesi gereken bir durum, sağolun