iki tarih arası sorguda IIf kullanımı

1 2 3
14/05/2009, 12:28

firdevs

Sayın hocalarım
Örnekteki deneme formunda, ilk tarih ve son tarih alanları var.
iki tarih sorgusunda

Between [Formlar]![deneme]![ilktarih] And [Formlar]![deneme]![sontarih]

Ölçüt yazılı güzel, çalışıyor
Ama ben istiyorum ki;
bo alanlar boş olduğunda liistenin tamamını göstersin
Ve ilk tarih dolu olduğunda o tarihten sonrasını
Ve son tarih dolu olduğunda da o tarihten öncesini göstersin.

IIf(([Tbl_FisKaydi].[Fis_Tarihi])=(IsNull([Formlar]![deneme]![ilktarih])) And ([Tbl_FisKaydi].[Fis_Tarihi])=(IsNull([Formlar]![deneme]![sontarih]));([Tbl_FisKaydi]![Fis_Tarihi]);(([Tbl_FisKaydi].[Fis_Tarihi]) Between [Formlar]![deneme]![ilktarih] And [Formlar]![deneme]![sontarih]))

bu ölçütü yazdım. Ama
IIf(ilk tarih dolu son tarih boş ise ; ilk tarihten sonrasını; IIf(son tarih dolu , ilk tarih boş ise ;son tarihden öncesini;IIf(her ikiside boş ise;tüm listeyi; değil ise ikitarih arasını göster)))
demek istiyorum. Öncesi sonrası IIF leri bilemedim. Hoş bu ölçütte alanlar boş olduğunda listenin tamamını göstermiyor.
Yanlışım nerede ?
İlk trarihden sonrasını
son tarihden öncesini
nasıl ifare edebilirim?
İlgilenebilirseniz çok sevinirim.

(Örneği eklayamadim.Açılır pencere engellendi diyor ayarlarında kapalı değil ama açılır pencereye izin vermedi.)
Çok basit bir örnekti sanırım sorunumu anlatabildim.
14/05/2009, 12:55

okileturc

Ben örneğinize çok fazla girmeden yöntem
tavsiye etmek istiyorum. Uygulamalarımızın bir çok
yerinde ( form, rapor, sorgu ) tarih aralığına ihtiyacımız
oluyor. Ben varsayılan ilk tarihi kullanıcının ayarlardan
girmesi yöntemini kullanıyorum



varsayılan son tarih için ise Bugün + kaç yıl tercihini belirtmesini
istiyorum

Artık tarih aralığı gerektiren alanlara bu iki değeri varsayılan olarak
getiriyorum

Diğer bir yöntem ise görüntülenecek kayıtların tablosundan DMin ile ilk
tarih değerini DMax ile son tarih değerini getirmek gayet pratik

Tarih alanlarının boş ya da Null olması çok sağlıklı değil
diye düşünüyorum. Form üzerindeki bu denetimlerin "dolu"
olmasını koşullamanız ve yukarıdikelere benzer bir yöntem kullanmanız
daha iyi olabilir

Kolay gelsin
14/05/2009, 13:58

firdevs

Hocam İlgilendiğiniz için teşekkür ederim. Başta oldukça acemi olduğumu söylemek isterim.
Sizin bahsettiğiniz resimde gösterdiğiniz ayarların yerini bile bulamadım.
Varsayılan nereden ayarlanıyor?
Ayrıca bu tarih değişken olmalı , istediğim zaman geçen yılın istediğim zaman geçen ayın verilerini almalıyım.
Sonrada bunların toplamlarıı alarak karşılaştırmalarını yapmalıyım.
Form üzerinden tarih girerek yapmak daha uygun geliyor ancak sizin tavsiyenizi de öğrenmek isterim belki burada belki de başka yerde işime yarar.
Tekrar ilgilenirseniz sevinirim.
14/05/2009, 14:29

okileturc

Özür dilerim, elbette ben yanlış ya da eksik anlatmış olabilrim
Benim bahsettiğim varsayılan tarih bilgilerinin yazılımcı
tarafından oluşturulacak bir tablo üzerinde tutulmasına yönelikti.
Access te böyle bir ayar maalesef yok.

Şöyle yapalım, siz örneğinizi ekleyin onun üzerinde yardımcı olmaya çalışalım
( Ben karmaşık yapılı bir IIF sorusuyla karşılaşınca benzer düzeyde çözümlere yöneldim )


Kolay gelsin
14/05/2009, 16:00

firdevs

Hocam Allah'a şükür IIF lı sorguları kavradım. Ama çok yeniyim.
Başka bilgisayara geçtim ve örneği gönderiyorum.
Hocam
>[Formlar]![deneme]![ilktarih]
yazdığım hatlı bir ölçüt mü?
Çalışıyor ama sonuç yok
İlk tarih kutusuna girdiğim tarihden büyüğünü yada
soh tarihe girdiğim tarihden küçüğünü sorgulamak istersem nasıl ifade etmeliyim?
14/05/2009, 16:20

okileturc

O zaman Between kullanmayın sorgu kriterine
>Forms!Formadi!ILKTARIH And <Forms!Formadi!SONTARIH
yazın
ayni formülü
>=Forms!Formadi!ILKTARIH And <=Forms!Formadi!SONTARIH
şekinde yazarsanız zaten between ile ayni işi yapar
Kolay gelsin
Formunuzdaki IIF butonuna
aşağıdaki kontrolü koydum
Kod:
Private Sub ııf_Click()
If Len(ilktarih) > 0 And Len(sontarih) > 0 Then
    DoCmd.OpenQuery "ikitarih", acNormal, acEdit
    Exit Sub
Else
   Forms!deneme!ilktarih = DMin("[Fis_Tarihi]", "Tbl_FisKaydi")
   Forms!deneme!sontarih = DMax("[Fis_Tarihi]", "Tbl_FisKaydi")
   MsgBox "Tekrar deneyin"
End If
End Sub
Yani tarihlerden biri boşsa tablodan en küçük ve en büyük
değerleri getirecek
tarih alanlarının varsayıllan değerlerine de ayni işlemi yaptım
sorgunuza da > And < kodunu yazdım
bir inceleyin
Kolay gelsin
1 2 3