Giriş Tarihine Göre Eğitim Planlama

1 2 3 4 5 6 7 8 9 10 11
21/01/2020, 12:09

accessman

ilk önce subat diye tablo oluşturdum manuel olarak hafta içi günleri girdim güncelleme sorguları ile modu ve vardia alanlarını doldurdum

UPDATE subat SET subat.modu = (DateDiff('d',"03.01.2020",[tarihi])) Mod "24";

SELECT subat.tarihi, vardiya.v0816 FROM subat INNER JOIN vardiya ON subat.modu = vardiya.[mod];

UPDATE Sorgu3 INNER JOIN subat ON Sorgu3.tarihi = subat.tarihi SET subat.vardia = [v0816];



21/01/2020, 12:17

accessman

sonra bu sorgu ilede rapor veri kaynağını oluşturdum

SELECT subat.tarihi AS egitim_tarihi, liste.Kimlik, liste.tarih AS ise_giris_tarihi, Format([tarih],"mm") AS İfade1
FROM subat INNER JOIN liste ON subat.vardia = liste.vardiya
WHERE (((Format([tarih],"mm"))="02"));


ve şöyle bir sonuç aldım



21/01/2020, 12:23

accessman

şimdi bu işlemleri Vba kodları ile yapmam lazım aynı zamanda bu listede bir kişi sabah vardiyasında olduğu tüm günlerde var 
yani bir kişi bu listede en az dört en fazla 8 kez tekrarlamış

SELECT Sorgu7.Kimlik, Count(Sorgu7.ise_giris_tarihi) AS Sayise_giris_tarihi FROM Sorgu7 GROUP BY Sorgu7.Kimlik;
21/01/2020, 12:36

accessman

yinelenleri bulabiliyoruz

SELECT First(Sorgu7.[Kimlik]) AS [Kimlik Alan], Count(Sorgu7.[Kimlik]) AS YinelemeSayısı
FROM Sorgu7
GROUP BY Sorgu7.[Kimlik]
HAVING (((Count(Sorgu7.[Kimlik]))>1));


ama nasıl her kişi bir kez listede geçmesi için silme işlemi yapabiliriz
21/01/2020, 12:46

accessman

dört yinelenen kayıttan üçünü silip birini bırakan bir sorgu varmı 
şu sorgu ile her personelin listede geçtiği ilk tarihi buluyoruz

SELECT liste.Kimlik, First(subat.tarihi) AS egitim_tarihi, First(liste.tarih) AS ise_giris_tarihi, First(Format([tarih],"mm")) AS İfade1
FROM subat INNER JOIN liste ON subat.vardia = liste.vardiya
GROUP BY liste.Kimlik
HAVING (((First(Format([tarih],"mm")))="02"));

liste uzunluğunu 500 den 100 düşürdü ve herkesi 4 ayrı tarihe  (3,10,14,20 şubat) topladı
21/01/2020, 18:04

accessman

kullandığım sorgular


Sub sorgula()
    Dim i As Integer
    Dim ay As String
    Dim songun As Integer
   
    ay = ""
    songun = 31
   
    For i = 1 To 12
        If i < 10 Then ay = "0" & i
        If i = 1 Or i = 3 Or i = 5 Or i = 7 Or i = 8 Or i = 10 Or i = 12 Then songun = 31
        If i = 4 Or i = 6 Or i = 9 Or i = 11 Then songun = 30
        If i = 2 Then songun = 29
       
        createTable ay
        insertInto ay, 1, songun
        updateTable ay, "03.01.2020"
        updateTable1 ay
        updateTable2 ay
    Next
End Sub

Sub createTable(ay As String)
    Dim dbs As Database
    Set dbs = OpenDatabase("egitim.accdb")
    dbs.Execute "CREATE TABLE " & "ay" & ay & " (tarihi DATETIME, modu INTEGER, vardia CHAR);"
    dbs.Close
End Sub

Sub insertInto(ay As String, ilk As Integer, son As Integer)
    Dim dbs As Database
    Dim i As Integer
   
    Set dbs = OpenDatabase("egitim.accdb")
   
    For i = ilk To son
    dbs.Execute " INSERT INTO " & "ay" & ay & "" _
            & "(tarihi, modu, vardia) VALUES " _
            & "('" & i & "." & ay & ".2020', '', '');"
    Next
           
    dbs.Close
End Sub
Sub updateTable(ay As String, sabitTarih As String)
    Dim dbs As Database
    Set dbs = OpenDatabase("egitim.accdb")
    dbs.Execute "UPDATE " & "ay" & ay & " SET " & "ay" & ay & ".modu = (DateDiff('d','" & sabitTarih & "',[tarihi])) Mod '24';"
    dbs.Close
End Sub

Sub updateTable1(ay As String)
    Dim dbs As Database
    Set dbs = OpenDatabase("egitim.accdb")
    dbs.Execute "SELECT " & "ay" & ay & ".tarihi, vardiya.v0816 INTO " & "ayvar" & ay & " FROM " & "ay" & ay & " INNER JOIN vardiya ON " & "ay" & ay & ".modu = vardiya.[mod];"
    dbs.Close
End Sub

Sub updateTable2(ay As String)
    Dim dbs As Database
    Set dbs = OpenDatabase("egitim.accdb")
    dbs.Execute "UPDATE " & "ayvar" & ay & " INNER JOIN " & "ay" & ay & " ON " & "ayvar" & ay & ".tarihi = " & "ay" & ay & ".tarihi SET " & "ay" & ay & ".vardia = [v0816];"
    dbs.Close
End Sub
1 2 3 4 5 6 7 8 9 10 11