Skip to main content

AccessTr.neT


Tarih Aralığı İçin Filtreleme Yapma

Tarih Aralığı İçin Filtreleme Yapma

#7
dilerim işinize yarar ama hatırlatayım daha önceden de belirttiğim gibi boş denilebilecek tablolar özellikle de kapsamlı sorgularda, sizin açınızdan olumlu olmaz, bir kaç deneme yapar ve uygun sonuçları verdiğini görünce doğru olduğu düşünüp cevabı yollarız ama önceki konunuzda olduğu gibi aslında yanlış bir çözüm olmuş olur.
iyi çalışmalar
süzme butonunun kodu:
  Dim Kosul, SqlKynk, GelMe As String

  Kosul = ""

    If txtTCKimlikNo.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.KimlikNo) Like '*' & [Formlar]![frmPersonelAra]![txtTCKimlikNo] & '*')"
    End If

    If txtAdSoyad.Value <> "" Then
      Kosul = Kosul & " AND (([Adi] & ' ' & [Soyadi]) Like '*' & [Formlar]![frmPersonelAra]![txtAdSoyad] & '*') "
    End If

  If txtKadroUnvan.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.KadroUnvan) Like '*' & [Formlar]![frmPersonelAra]![txtKadroUnvan] & '*') "
    End If

    If txtCalısmaKurulus.Value <> "" Then
      Kosul = Kosul & " AND ((Kuruluslar.CalısmaKurulus) Like '*' & [Formlar]![frmPersonelAra]![txtCalısmaKurulus] & '*') "
    End If

    If txtBirim.Value <> "" Then
      Kosul = Kosul & " AND ((Birimler.CalismaBirim) Like '*' & [Formlar]![frmPersonelAra]![txtBirim] & '*') "
    End If


    If cmbCinsiyet.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.Cinsiyet)=[Formlar]![frmPersonelAra]![cmbCinsiyet]) "
      '"[Cinsiyet]=cmbCinsiyet.Value AND "
    End If

    If IsDate(Metin136) And IsDate(Metin138) Then
      Kosul = Kosul & " AND ((PERMYN2.MuayeneTarihi) Between [Formlar]![frmPersonelAra]![Metin136] AND [Formlar]![frmPersonelAra]![Metin138])"
    End If
GelMe = IIf(CerGln = 1, " Not ", "")

    Kosul = Mid(Kosul, 6)

  'On Error Resume Next
' lstPersonel.RowSource = "SELECT * FROM srgLstPersonel WHERE " & Kosul & " "

SqlKynk = " SELECT PRSKYT.KimlikNo, [Adi] & ' ' & [Soyadi] AS Adı_Soyadı, " & _
          " PRSKYT.KadroUnvan, Kuruluslar.CalısmaKurulus, Birimler.CalismaBirim, PRSKYT.Cinsiyet, PERMYN2.MuayeneTarihi" & _
          " FROM PERMYN2 INNER JOIN (Kuruluslar RIGHT JOIN (Birimler RIGHT JOIN PRSKYT ON Birimler.CBrm_id = PRSKYT.CalismaBirim) " & _
          " ON Kuruluslar.CKrls_id = PRSKYT.CalısmaKurulus) ON PERMYN2.KimlikNo = PRSKYT.KimlikNo" & _
          " WHERE (" & Kosul & _
          " AND (" & GelMe & "(PERMYN2.KimlikNo) Is Null));"

  lstPersonel.RowSource = SqlKynk
.rar Periyodik_MFormu_hy.rar (Dosya Boyutu: 109,84 KB | İndirme Sayısı: 4)
Cevapla
#8
(24/03/2020, 14:10)berduş yazdı: dilerim işinize yarar ama hatırlatayım daha önceden de belirttiğim gibi boş denilebilecek tablolar özellikle de kapsamlı sorgularda, sizin açınızdan olumlu olmaz, bir kaç deneme yapar ve uygun sonuçları verdiğini görünce doğru olduğu düşünüp cevabı yollarız ama önceki konunuzda olduğu gibi aslında yanlış bir çözüm olmuş olur.
iyi çalışmalar
süzme butonunun kodu:
  Dim Kosul, SqlKynk, GelMe As String

  Kosul = ""

    If txtTCKimlikNo.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.KimlikNo) Like '*' & [Formlar]![frmPersonelAra]![txtTCKimlikNo] & '*')"
    End If

    If txtAdSoyad.Value <> "" Then
      Kosul = Kosul & " AND (([Adi] & ' ' & [Soyadi]) Like '*' & [Formlar]![frmPersonelAra]![txtAdSoyad] & '*') "
    End If

  If txtKadroUnvan.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.KadroUnvan) Like '*' & [Formlar]![frmPersonelAra]![txtKadroUnvan] & '*') "
    End If

    If txtCalısmaKurulus.Value <> "" Then
      Kosul = Kosul & " AND ((Kuruluslar.CalısmaKurulus) Like '*' & [Formlar]![frmPersonelAra]![txtCalısmaKurulus] & '*') "
    End If

    If txtBirim.Value <> "" Then
      Kosul = Kosul & " AND ((Birimler.CalismaBirim) Like '*' & [Formlar]![frmPersonelAra]![txtBirim] & '*') "
    End If


    If cmbCinsiyet.Value <> "" Then
      Kosul = Kosul & " AND ((PRSKYT.Cinsiyet)=[Formlar]![frmPersonelAra]![cmbCinsiyet]) "
      '"[Cinsiyet]=cmbCinsiyet.Value AND "
    End If

    If IsDate(Metin136) And IsDate(Metin138) Then
      Kosul = Kosul & " AND ((PERMYN2.MuayeneTarihi) Between [Formlar]![frmPersonelAra]![Metin136] AND [Formlar]![frmPersonelAra]![Metin138])"
    End If
GelMe = IIf(CerGln = 1, " Not ", "")

    Kosul = Mid(Kosul, 6)

  'On Error Resume Next
' lstPersonel.RowSource = "SELECT * FROM srgLstPersonel WHERE " & Kosul & " "

SqlKynk = " SELECT PRSKYT.KimlikNo, [Adi] & ' ' & [Soyadi] AS Adı_Soyadı, " & _
          " PRSKYT.KadroUnvan, Kuruluslar.CalısmaKurulus, Birimler.CalismaBirim, PRSKYT.Cinsiyet, PERMYN2.MuayeneTarihi" & _
          " FROM PERMYN2 INNER JOIN (Kuruluslar RIGHT JOIN (Birimler RIGHT JOIN PRSKYT ON Birimler.CBrm_id = PRSKYT.CalismaBirim) " & _
          " ON Kuruluslar.CKrls_id = PRSKYT.CalısmaKurulus) ON PERMYN2.KimlikNo = PRSKYT.KimlikNo" & _
          " WHERE (" & Kosul & _
          " AND (" & GelMe & "(PERMYN2.KimlikNo) Is Null));"

  lstPersonel.RowSource = SqlKynk

Kodlarınız muayeneye gelenler için kusursuz çalışıyor, gelmeyenler için sonuç üretmiyor.  Planlanan takvime göre kuruluşları muayeneye çağırıyoruz, internetten uyarladığım ekteki sorgu örneği (PMF2_Gelmeyen) ile kuruluşa göre süzerek muayeneye gelmeyenleri gösteriyorum. (Ekte, örnekte PRSKYT tablosunda olup muayene tarihi boş olan (PERMYN2 tablosu anamnez bilgilerini tutuyor) 2 kişi var.)  frmPersonelAra formu benzeri bir filtre ile (ayrı bir form ile de olabilir) kuruluş bazında gelmeyenlerin tespitine dönük nasıl bir algoritma oluşturulabilir? Buradaki tek boş alan Çalışma Birimi, idari çalışanların akademik olanlar gibi birimleri yok kuruluş kısmı dolu sadece.

Arama filtresi düzenlemenizle çok kullanışlı olmuş, emeklerinize teşekkürler.
.rar PMuaGelmeyen.rar (Dosya Boyutu: 109,97 KB | İndirme Sayısı: 3)
Cevapla
#9
Dediğiniz gibi kapsamlı sorgularda personel araması hatalı çalışıyor, muayeneye gelenler için ayrı bir buton mu oluşturmalı Kayıt Ara dışında, ya da birim alanını filtreden mi kaldırmalı?
Son Düzenleme: 24/03/2020, 16:48, Düzenleyen: mgunes. (Sebep: ifade ekleme)
Cevapla
#10
kayıt ara butonunu aşağıdaki kodla değiştirip dener misiniz
  Dim Kosul, KosulMayene, SqlKynk, GelMe As String

Kosul = ""
KosulMayene = ""

If txtTCKimlikNo.Value <> "" Then
Kosul = Kosul & " AND ((PRSKYT.KimlikNo) Like '*' & [Formlar]![frmPersonelAra]![txtTCKimlikNo] & '*')"
End If

If txtAdSoyad.Value <> "" Then
Kosul = Kosul & " AND (([Adi] & ' ' & [Soyadi]) Like '*' & [Formlar]![frmPersonelAra]![txtAdSoyad] & '*') "
End If

If txtKadroUnvan.Value <> "" Then
Kosul = Kosul & " AND ((PRSKYT.KadroUnvan) Like '*' & [Formlar]![frmPersonelAra]![txtKadroUnvan] & '*') "
End If

If txtCalısmaKurulus.Value <> "" Then
Kosul = Kosul & " AND ((Kuruluslar.CalısmaKurulus) Like '*' & [Formlar]![frmPersonelAra]![txtCalısmaKurulus] & '*') "
End If

If txtBirim.Value <> "" Then
Kosul = Kosul & " AND ((Birimler.CalismaBirim) Like '*' & [Formlar]![frmPersonelAra]![txtBirim] & '*') "
End If


If cmbCinsiyet.Value <> "" Then
Kosul = Kosul & " AND ((PRSKYT.Cinsiyet)=[Formlar]![frmPersonelAra]![cmbCinsiyet]) "
End If

GelMe = IIf(CerGln = 1, "", " Not ")
If IsDate(Metin136) And IsDate(Metin138) Then
KosulMayene = " where (PERMYN2.MuayeneTarihi) Between [Formlar]![frmPersonelAra]![Metin136] AND [Formlar]![frmPersonelAra]![Metin138]"
End If

'Kosul = Mid(Kosul, 6)

'On Error Resume Next

SqlKynk = " SELECT PRSKYT.KimlikNo, [Adi] & ' ' & [Soyadi] AS Adı_Soyadı, PRSKYT.KadroUnvan, Kuruluslar.CalısmaKurulus, Birimler.CalismaBirim, PRSKYT.Cinsiyet" & _
" FROM Birimler RIGHT JOIN (Kuruluslar RIGHT JOIN PRSKYT ON Kuruluslar.CKrls_id = PRSKYT.CalısmaKurulus) ON Birimler.CBrm_id = PRSKYT.CalismaBirim" & _
" WHERE ( PRSKYT.KimlikNo " & GelMe & " in (select PERMYN2.KimlikNo from PERMYN2 " & KosulMayene & " )" & Kosul & ");"

lstPersonel.RowSource = SqlKynk
Cevapla
#11
Durum değişmedi.
ilk gönderdiğim dosyaya göre konuşursak (elimdeki uygulama verileri üzerinden);

Tarih kutularını boş bırakıp kriterleri (isim veya diğerlerinden birini veya birkaç kriteri aynı anda) yazdığımda  kayıt araya basınca ya çalışmıyor, ya da hatalı çalışıyor. Kuruluş (örneğin Ziraat Fakültesi için) 342 kayıt varken 34 buluyor. ( PRSKYT tablosundan bakınca bu sayı 392, birim kısmı boş olanlardan sanırım). Toplamda 8310 kayıt var, tüm personel butonuna basınca 6234 gösteriyor.İlk dosyada da öyle (Çalışma birimi alanının boş olan kayıtları yer almıyor ) .

Temizle butonu ya çalışmıyor ya da yanlış çalışıyor. Daha önce textboxların içeriğini siliyordu ve listeyi temizliyordu.

İki tarih arası muayeneye gelenleri bulmada hiçbir sorun yok.

Muayeneye gelecek olanların kişisel bilgileri PRSKYT tablosunda yer alırken PERMYN2 tablosunda(anamnez) kaydı bulunmuyor (bu yüzden PRSKYT kayıt sayısı 8310  iken PERMYN2 de kayıt 519) . Kimlik kaydı olmayan personel için anasayfa formunda personel ismi girmeden (boş kayıt) ara (büyüteç) butonuna basıyorum. Ordan kimlikno ile başlayıp yeni kayıt oluşturuyorum.
Bu bilgilere göre muayene için tarih filtreleme ile personel bilgileri görüntülemenin birbirinden bağımsız yapılmasını önerir misiniz?

Teşekkürler.
Son Düzenleme: 24/03/2020, 23:38, Düzenleyen: mgunes. (Sebep: düzeltme)
Cevapla
#12
gönderdiğiniz örnekte topu topu personelde 4, muayenede 2 kayıt var
kritersiz girip  gelenleri göster dediğimde gelenleri gelmeyenleri göster dediğimde gelmeyenleri gösteriyor
kriter girdiğimde yine doğru sonuç veriyor
örneği yeniden yüklüyorum bu örneğe göre nerede hata veriyor söyler misiniz?
denemeSorgu sorgusunda tüm personel ve muayene tarihleri var muayeneye gitmeyenlerin tarih alanı boş
.rar PMuaGelmeyen_hy.rar (Dosya Boyutu: 108,44 KB | İndirme Sayısı: 6)
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task