AccessTr.neT

Tam Versiyon: İki kodun birleştirimesi
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2 3
Hocam çok teşekkürler harika oldu elinize sağlıl. Bu konu ve

https://accesstr.net/konu-4-referansli-s...8#pid74198

linkteki konu çözümlenmiş sorunlar bölümüne taşınabilir. saygılar.
(30/04/2011, 10:50)ayhan2122 yazdı: [ -> ]Null durumunda hata vermemesi için aşağıdaki kodu kullanın.

Kod:
Private Sub hesap_Click()
On Error GoTo hesap_Click_HATA

Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL As String
Dim DK As Long
Dim SA As Long
Set db = CurrentDb()
strSQL = "SELECT TBL_SEYIR_SURESI.* " & _
"FROM TBL_SEYIR_SURESI " & _
";"

Set rs = db.OpenRecordset(strSQL)
Me.sonuc = 0
DK = 0
SA = 0
If rs.EOF = True Then GoTo 90
rs.MoveFirst
Do Until rs.EOF

If (aysecim = 1 Or rs!AYLAR = aykutu) And _
(unsursec = 1 Or rs!GOREV_UNSURU = unsurkutu) And _
(gorevsec = 1 Or rs!GOREV_1 = gorevkutu) And _
(tarıhsec = 1 Or (rs!KALKIS_TARIHI >= CDate(araa1)) And rs!KALKIS_TARIHI <= CDate(araa2)) _
Then
SA = SA + Nz(Left(rs!GOREV_1_SURE, 2), 0): DK = DK + Nz(Mid(rs!GOREV_1_SURE, 4, 2), 0)
SA = SA + Nz(Left(rs!GOREV_2_SURE, 2), 0): DK = DK + Nz(Mid(rs!GOREV_2_SURE, 4, 2), 0)
SA = SA + Nz(Left(rs!GOREV_3_SURE, 2), 0): DK = DK + Nz(Mid(rs!GOREV_3_SURE, 4, 2), 0)
End If
100
rs.MoveNext
Loop
90
Me.sonuc = (SA + Int(DK / 60)) & ":" & (DK - (Int(DK / 60) * 60))
hesap_Click_CIKIS: Exit Sub
hesap_Click_HATA: MsgBox "Tarih aralıklarını belirtiniz"
Resume hesap_Click_CIKIS
End Sub

Sayın hocam her nekadar konunun çözüldüğünü bildirsemde programı kullanmaya başladıktan sonra küçük bir hata farkettim. 24.satırdaki

(gorevsec = 1 Or rs!GOREV_1 = gorevkutu) And _

satırında kaynak olarak GOREV_1 kullanılıyor. Ancak tabloda 3 görev sütunu var. biz saat toplamını aldırdığımızda tablonun sadece gorev_1 sütunundaki görevleri alıyor. Ancak bazı durumlarda Gorev_2 ve Gorev_3 sütunlarındada saat olarak değer oluyor. Bu durumda kodu Gorev_1, Gorev_2, Gorev_3 de kapsayıp aynı gorev tanımına uyan ları topltmasını nasıl sağlayabiliriz.
Lütfen iyice kontrol ediniz : )

Kod:
Private Sub hesap_Click()
On Error GoTo hesap_Click_HATA

Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL As String
Dim DK As Long
Dim SA As Long
    Set db = CurrentDb()
    strSQL = "SELECT TBL_SEYIR_SURESI.* " & _
             "FROM TBL_SEYIR_SURESI " & _
             ";"

    Set rs = db.OpenRecordset(strSQL)
    Me.sonuc = 0
    DK = 0
    SA = 0
    If rs.EOF = True Then GoTo 90
    rs.MoveFirst
    Do Until rs.EOF
          
If (aysecim = 1 Or rs!AYLAR = aykutu) And _
   (unsursec = 1 Or rs!GOREV_UNSURU = unsurkutu) And _
   (gorevsec = 1 Or rs!GOREV_1 = gorevkutu Or rs!GOREV_2 = gorevkutu Or rs!GOREV_3 = gorevkutu) And _
   (tarıhsec = 1 Or (rs!KALKIS_TARIHI >= CDate(araa1)) And rs!KALKIS_TARIHI <= CDate(araa2)) _
Then
        SA = IIf(gorevsec = 1 Or rs!GOREV_1 = gorevkutu, SA + Nz(Left(rs!GOREV_1_SURE, 2), 0), SA)
        DK = IIf(gorevsec = 1 Or rs!GOREV_1 = gorevkutu, DK + Nz(Mid(rs!GOREV_1_SURE, 4, 2), 0), DK)
        SA = IIf(gorevsec = 2 Or rs!GOREV_2 = gorevkutu, SA + Nz(Left(rs!GOREV_2_SURE, 2), 0), SA)
        DK = IIf(gorevsec = 2 Or rs!GOREV_2 = gorevkutu, DK + Nz(Mid(rs!GOREV_2_SURE, 4, 2), 0), DK)
        SA = IIf(gorevsec = 3 Or rs!GOREV_3 = gorevkutu, SA + Nz(Left(rs!GOREV_3_SURE, 2), 0), SA)
        DK = IIf(gorevsec = 3 Or rs!GOREV_3 = gorevkutu, DK + Nz(Mid(rs!GOREV_3_SURE, 4, 2), 0), DK)
End If
100
    rs.MoveNext
    Loop
90
Me.sonuc = (SA + Int(DK / 60)) & ":" & (DK - (Int(DK / 60) * 60))
hesap_Click_CIKIS: Exit Sub
hesap_Click_HATA: 'MsgBox "Tarih aralıklarını belirtiniz":
                  Resume hesap_Click_CIKIS
End Sub
Hocam konu çözümlendi olarak göründüğü için örnek ekleyemedim. Bende örneği farklı bir siteye ekledim. Sorunum farklı bir şekilde bazı toplamların doğru olmaması olarak devam ediyor. Örnektede ifade ettim. Teşekkür ederim.

http://www.mediafire.com/?nsn2yy5mu1kfpda
İncelermisiniz...
POWER Hocam bu seviyeye kadar gelmiştim bende yalnız kodu bu şekilde kullandığımızda görev unsuruna göre görev seçtiğimizde sonuç hatalı çıkıyor. Örnek olarak ana tabloda GG görevi 2 defa yapılmış ve toplam sekiz saat. hesapladığımızda görev unsuru olarak gemi ile yapılmış ve toplam 31:10 çıkıyor.
Sayfalar: 1 2 3