AccessTr.neT

Tam Versiyon: Tablodaki verileri özel olarak raporlama
Ş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
Sayın seruz un dediği gibi geçici tablo ile sorun çözülebilir.Sql ile çalışma devam ediyor
kısa süre sonra cevabını net olarak yazacağım
İyi çalışmalar
Guzel soru gercekten
Soru güzel, havada kötü olunca, dışarı çıkmayıp yemek saatinde geçici tablo yöntemiyle çözdüm.

Buyrun, Rapor Ek'tedir.

Kod:
Private Sub Report_Open(Cancel As Integer)
On Error GoTo Hata_Olusursa
Dim RS As New ADODB.Recordset
Dim GS As New ADODB.Recordset
Dim Onceki_Personel, Onceki_GC

    'Geçici tabloda bulunan eski kayıtlar siliniyor.
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Delete From LOG_Gecici"
    DoCmd.SetWarnings True

    'Asıl Log Tablosu okuma için açılıyor
    RS.Open "GirisCikis", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
    
    'Geçici LOG Tablosu yazma için açılıyor
    GS.Open "LOG_Gecici", CurrentProject.Connection, adOpenDynamic, adLockOptimistic

    Do While Not RS.EOF

        'Personel değiştiğinde bir önceki bilgiler sıfırlanıyor.
        If Onceki_Personel <> RS("Personel") Then
            Onceki_Personel = RS("Personel")
            Onceki_GC = Null
        End If

        'Giriş İşleminde tabloya çıkışı boş olan yeni kayıt yazılıyor
        If RS("GC") = 0 Then
            GS.AddNew
            GS("Personel") = RS("Personel")
            GS("GirisZamani") = RS("Zaman")
            GS("CikisZamani") = Null
            GS.Update
        Else
        'Çıkış İşlemi
            'Bir önceki işlem Giriş ise aynı kayda çıkış zamanı yazılıyor ve son giriş kaydı güncelleniyor
            If Onceki_GC = 0 Then
                GS("CikisZamani") = RS("Zaman")
                GS.Update
            End If
            'Bir önceki işlem yoksa veya çıkış ise yeni ve girişi boş olan çıkış kaydı yazılıyor
            If IsNull(Onceki_GC) Or Onceki_GC = 1 Then
                GS.AddNew
                GS("Personel") = RS("Personel")
                GS("GirisZamani") = Null
                GS("CikisZamani") = RS("Zaman")
                GS.Update
            End If
        End If
        
        'Yeni kayıt okumadan önce mevcut bilgi önceki olarak saklanıyor
        Onceki_GC = RS("GC")
        
        RS.MoveNext
    
    Loop

    RS.Close
    GS.Close

Normal_Cikis:
    Exit Sub

Hata_Olusursa:
    MsgBox Err.Description
    Resume Normal_Cikis

End Sub
Geçici tablo oluşturmadan, rapor detayındaki NextRecord
ve Formattaki Cancel özelliğini kullanarak da yaptım aynı raporu.
Rapor : TAKİP ÇİZELGESİ - YÖNTEM2

Kod:
Option Compare Database
Dim Onceki_Personel, Onceki_Zaman, Onceki_GC

Private Sub Ayrıntı_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo Hata_Olusursa

    'Personel değiştiğinde bir önceki bilgiler sıfırlanıyor.
    If Onceki_Personel <> Me.Personel Then
        Onceki_Personel = Me.Personel
        Onceki_GC = Null
    End If

    'Giriş İşlemi
    If Me.GC = 0 Then
        'Bir önceki işlem yoksa veya çıkış ise
        If IsNull(Onceki_GC) Or Onceki_GC = 1 Then
            Me.GirisZamani = Me.Zaman
            Me.CikisZamani = Null
            'Yeni kayıt okumadan önce mevcut bilgi önceki olarak saklanıyor
            Onceki_GC = Me.GC
            Onceki_Zaman = Me.Zaman
            'Mevcut kayıt yazdırılmadan Yeni kayda gidiliyor
            Me.NextRecord = True
            Cancel = True
            Exit Sub
        'Bir önceki işlem de Giriş ise
        ElseIf Onceki_GC = 0 Then
            'Bir önceki giriş kaydı ise o kayıt direkt yazdırılıyor, yeni kayda gidilmiyor
            Me.GirisZamani = Onceki_Zaman
            Me.CikisZamani = Null
            Onceki_GC = Null
            Me.NextRecord = False
        End If
    Else
    'Çıkış İşlemi
        'Bir önceki işlem Giriş ise aynı kayda çıkış zamanı ekleniyor ve kayıt yazdırılıyor
        If Onceki_GC = 0 Then
            Me.CikisZamani = Me.Zaman
            Me.NextRecord = True
        'Bir önceki işlem yoksa veya çıkış ise yeni ve girişi boş olan çıkış kaydı yazılıyor
        ElseIf IsNull(Onceki_GC) Or Onceki_GC = 1 Then
            Me.GirisZamani = Null
            Me.CikisZamani = Me.Zaman
            Me.NextRecord = True
        End If
        'Yeni kayıt okumadan önce mevcut bilgi önceki olarak saklanıyor
        Onceki_GC = Me.GC
        Onceki_Zaman = Me.Zaman
    End If
    
Normal_Cikis:
    Exit Sub

Hata_Olusursa:
    MsgBox Err.Description
    Resume Normal_Cikis
End Sub
Her iki örnek için teşekkürler seruz hocam,
Sayın Umuttk
bir örnek istiyordunuz alın size değişiği
Sayfalar: 1 2 3