İki tarih arası sorgulama

Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Merhaba,

Ekteki örnek dosya için 2 adet sorum olacak.

1- tarih alanı için form üzerinde iki tarih arası sorgulama yapmak istiyorum.Fakat mantık biraz farklı.

Örnek vermek gerekirse;

  • İki alan boş ise tüm kayıtları gösterecek
  • İki tarih alanı dolu ise girilen tarih aralığındaki bilgiler
  • İlk tarih alanı boş ise 2. tarih alanından küçük olan bilgiler
  • İkinci tarih alanı boş ise 1.tarih alanından büyük bilgiler sorgulanacak
2-onay alanı için 2 tipte sorgulama olacak
  • Tüm, Onaylı,Onaysız
  • Tüm , ok , nok, bekleme
ok ve bekleme olan veriler onaylı, boş ve nok olan bilgiler ise onaysız olarak sorgulanması gerekiyor.

Örneğin;

  • 1.combobox'dan onaylı seçtiğimizde bana ok ve bekleme olanları, onaysız seçtiğimde ise boş ve nok olanları sorgulasın.
  • 2.combobox'da istersek onaylı olanlardan , örneğin sadece ok olan verileri seçmek istiyorum.
Desteğiniz için şimdiden teşekkürler.
 

Ekli dosyalar

  • 220 KB Görüntüleme: 19
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın Recep İpek,

Tüm ihtimalleri kontrol edemedim. mantıksız bir nokta yakalarsanız, yardımcı olabilirim.

iyi çalışmalar
 

Ekli dosyalar

  • 20.2 KB Görüntüleme: 53
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Tam istediğim gibi olmuş.Bir noktada eksiklik kaldı.

İkinci onay seçeneği çoğu zaman kullanılmayacak.Örneğin birinci onay seçeneğinden onaylıları seçince sadece onaylı verilerin gelmesi yeterli.İkincisinden veri seçmemize gerek yok.
Fakat bazı durumlarda onaylılardan sadece ok olanları görmek istiyoruz.Bu seferde ikincisinden ok seçmemiz lazım.

Sanırım 3 tane kriter olması gerekiyor.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
İlk kriterden onaylı ikinci kriterde ok seçip deneyin.

İkinci kriteri kullanmanıza gerek yok boş bırakın, ilk kriterdeki filtreleme geçerli olacaktır.
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Evet dediğiniz gibi doğru şekilde çalışıyor.Fakat ikinci alanı boş bırakırsanız tüm kayıtları gösteriyor.(Onaylı,Onaysız).

Ancak ikincisinden Tüm seçersek tüm onaylı kayıtları gösteriyor.Bizde ikinci alanı boş bıraktırmayız. :D

Ellerinize ve bilginize sağlık.Çok teşekkürler.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın Recep İpek,

Haklısınız. Dediğinize gerek yok. Kırmızılı kodları ekleyin.

İyi çalışmalar

Kod:
Private Sub Command4_Click()
On Error GoTo Err_Command4_Click

    Dim stDocName As String
    Dim tarih1 As String
    Dim tarih2 As String
    Dim strWhere As String
    Dim strWhere2 As String
    
    If Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) = 0 Then
        strWhere = ""
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) = 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        strWhere = "tarih>=#" & tarih1 & "#"
    ElseIf Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih<=#" & tarih2 & "#"
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih>#" & tarih1 & "# And tarih<#" & tarih2 & "#"
    End If
    
    If Me.Combo7 = "Onaylı" Then
        If Me.Combo9 = "Tüm" Then
            strWhere2 = "onay='ok' Or onay='bekleme'"
        ElseIf Me.Combo9 = "ok" Then
            strWhere2 = "onay='ok'"
        ElseIf Me.Combo9 = "bekleme" Then
             strWhere2 = "onay='bekleme'"
        End If
  [COLOR=Red] strWhere2 = "onay='ok' Or onay='bekleme'"[/COLOR]
       
    ElseIf Me.Combo7 = "Onaysız" Then
    
        If Me.Combo9 = "Tüm" Then
            strWhere2 = "Nz(onay)=' ' Or onay='nok'"
        ElseIf Me.Combo9 = "nok" Then
            strWhere2 = "onay='nok'"
        ElseIf Me.Combo9 = "Boş" Then
            strWhere2 = "Nz(onay)=' '"
       End If
        
    [COLOR=Red]strWhere2 = "Nz(onay)=' ' Or onay='nok'"[/COLOR]
    
    ElseIf Me.Combo7 = "Tüm" Then
        strWhere2 = ""
    End If
    
    If strWhere = "" Then
        strWhere = strWhere2
    ElseIf strWhere2 <> "" Then
        strWhere = strWhere & " And " & strWhere2
    End If
    
    stDocName = "dataQ"
    DoCmd.OpenReport stDocName, acPreview, , strWhere

Exit_Command4_Click:
    Exit Sub

Err_Command4_Click:
    MsgBox Err.Description
    Resume Exit_Command4_Click
    
End Sub
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Bu daha süper.Hocam son olarak size zahmet veriyorum ama sanırım tarih alanında da bir eksiklik var.

Birinci tarih alanına 05.12.2009 girildiğinde ve Onaylı olanları seçince 05.12.2009 tarihinden küçük olan onaylıları da gösteriyor.Aynı şekilde ikinci alana girildiğinde de büyük olan onaylıları gösteriyor.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Parantezleri unutmuşum:

Kod:
Private Sub Command4_Click()
On Error GoTo Err_Command4_Click

    Dim stDocName As String
    Dim tarih1 As String
    Dim tarih2 As String
    Dim strWhere As String
    Dim strWhere2 As String
    
    If Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) = 0 Then
        strWhere = ""
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) = 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        strWhere = "tarih>=#" & tarih1 & "#"
    ElseIf Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih<=#" & tarih2 & "#"
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih>#" & tarih1 & "# And tarih<#" & tarih2 & "#"
    End If
    
    If Me.Combo7 = "Onaylı" Then
        If Me.Combo9 = "Tüm" Then
           [COLOR=Red] strWhere2 = "(onay='ok' Or onay='bekleme')"[/COLOR]
        ElseIf Me.Combo9 = "ok" Then
            strWhere2 = "onay='ok'"
        ElseIf Me.Combo9 = "bekleme" Then
             strWhere2 = "onay='bekleme'"
        End If
 [COLOR=Red]  strWhere2 = "(onay='ok' Or onay='bekleme')"[/COLOR]
       
    ElseIf Me.Combo7 = "Onaysız" Then
    
        If Me.Combo9 = "Tüm" Then
            [COLOR=Red]strWhere2 = "(Nz(onay)=' ' Or onay='nok')"[/COLOR]
        ElseIf Me.Combo9 = "nok" Then
            strWhere2 = "onay='nok'"
        ElseIf Me.Combo9 = "Boş" Then
            strWhere2 = "Nz(onay)=' '"
       End If
        
    [COLOR=Red]strWhere2 = "(Nz(onay)=' ' Or onay='nok')"[/COLOR]
    
    ElseIf Me.Combo7 = "Tüm" Then
        strWhere2 = ""
    End If
    
    If strWhere = "" Then
        strWhere = strWhere2
    ElseIf strWhere2 <> "" Then
        strWhere = strWhere & " And " & strWhere2
    End If
        MsgBox strWhere

    stDocName = "dataQ"
    DoCmd.OpenReport stDocName, acPreview, , strWhere

Exit_Command4_Click:
    Exit Sub

Err_Command4_Click:
    MsgBox Err.Description
    Resume Exit_Command4_Click
    
End Sub
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Mavi satırları yukarı alınca tam istediğimiz gibi oldu.Çok çok teşekkürler. :D

Kod:
Private Sub Command4_Click()
On Error GoTo Err_Command4_Click

    Dim stDocName As String
    Dim tarih1 As String
    Dim tarih2 As String
    Dim strWhere As String
    Dim strWhere2 As String
    
    If Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) = 0 Then
        strWhere = ""
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) = 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        strWhere = "tarih>=#" & tarih1 & "#"
    ElseIf Len(Me.StartDate & vbNullString) = 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih<=#" & tarih2 & "#"
    ElseIf Len(Me.StartDate & vbNullString) > 0 And Len(Me.EndDate & vbNullString) > 0 Then
        tarih1 = tarihFormat(Me.StartDate)
        tarih2 = tarihFormat(Me.EndDate)
        strWhere = "tarih>#" & tarih1 & "# And tarih<#" & tarih2 & "#"
    End If
    
    If Me.Combo7 = "Onaylı" Then
[COLOR=blue] strWhere2 = "(onay='ok' Or onay='bekleme')"
[/COLOR]
        If Me.Combo9 = "Tüm" Then
           [COLOR=red] strWhere2 = "(onay='ok' Or onay='bekleme')"[/COLOR]
        ElseIf Me.Combo9 = "ok" Then
            strWhere2 = "onay='ok'"
        ElseIf Me.Combo9 = "bekleme" Then
             strWhere2 = "onay='bekleme'"
        End If
 [COLOR=red] [/COLOR]       
    ElseIf Me.Combo7 = "Onaysız" Then
     [COLOR=blue]strWhere2 = "(Nz(onay)=' ' Or onay='nok')"

[/COLOR]        If Me.Combo9 = "Tüm" Then
            [COLOR=red]strWhere2 = "(Nz(onay)=' ' Or onay='nok')"[/COLOR]
        ElseIf Me.Combo9 = "nok" Then
            strWhere2 = "onay='nok'"
        ElseIf Me.Combo9 = "Boş" Then
            strWhere2 = "Nz(onay)=' '"
       End If
        
       
    ElseIf Me.Combo7 = "Tüm" Then
        strWhere2 = ""
    End If
    
    If strWhere = "" Then
        strWhere = strWhere2
    ElseIf strWhere2 <> "" Then
        strWhere = strWhere & " And " & strWhere2
    End If
        MsgBox strWhere

    stDocName = "dataQ"
    DoCmd.OpenReport stDocName, acPreview, , strWhere

Exit_Command4_Click:
    Exit Sub

Err_Command4_Click:
    MsgBox Err.Description
    Resume Exit_Command4_Click
    
End Sub
 
Üst