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
Tablodaki verileri özel olarak raporlama
Soru güzel, havada kötü olunca, dışarı çıkmayıp yemek saatinde geçici tablo yöntemiyle çözdüm.
Buyrun, Rapor Ek'tedir.
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
Bildiğini bilenin arkasından git, bildiğini bilmeyeni uyar, bilmediğini bilene öğret, bilmediğini bilmeyenden kaç.
Konfüçyüs
Konfüçyüs
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
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
Bildiğini bilenin arkasından git, bildiğini bilmeyeni uyar, bilmediğini bilene öğret, bilmediğini bilmeyenden kaç.
Konfüçyüs
Konfüçyüs
Her iki örnek için teşekkürler seruz hocam,
Sayın Umuttk
bir örnek istiyordunuz alın size değişiği
bir örnek istiyordunuz alın size değişiği
Konuyu Okuyanlar: 1 Ziyaretçi