Option Compare Database

'Ver.4 CREATE       2012/12/25

'MAKE AND DEBUG END 2012/12/26

'UPDATE             2013/01/18   'Weekday関数CALL時はvbMondayとしない事で他のMODULEと統一化

 

 

Dim SYSTEM_ROOT_PATH As String

Dim FELICA_DAT_PATH As String

Dim FELICA_DAT_FIL_NAM As String

Dim ABS_TIME_FROM(10) As Integer

Dim ABS_TIME_TO(10) As Integer

Dim MM_FOR_LECTURE As Integer

Dim MM_FOR_TESTING As Integer

Dim MM_ATTENDANCE_START As Integer

Dim MM_LATE_CAPA As Integer

Dim MM_FOR_ABSENCE As Integer

Dim FUNC_EARY_BACK As Boolean

Dim FUNC_OPE_ERR As Boolean

Dim EXTERN_MARK As String

 

Private Function record_write(ByVal s_id As String, _

                ByVal gakka As Integer, ByVal gakunenn As Integer, _

                                ByVal kmk_cd As Integer, ByVal yyyymmddhhmmss As Date) As Boolean

 

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim strSQL As String

Dim yyyy As Integer

Dim tmp As String

Dim wk_yyyymmddhhmmss As Date

 

    record_write = False

 

    wk_yyyymmddhhmmss = yyyymmddhhmmss

    yyyy = Year(yyyymmddhhmmss)

    If Month(yyyymmddhhmmss) >= 1 And Month(yyyymmddhhmmss) <= 3 Then yyyy = Year(yyyymmddhhmmss) - 1

   

    If FUNC_EARY_BACK = True Then

   

        tmp = """"

        tmp = Left$(tmp, 1)

       

        Set db = CurrentDb

 

        strSQL = "SELECT mark, felica_timestamp FROM T_ATTEND_DAT WHERE s_id='" & s_id & "' AND "

        strSQL = strSQL & "kmk_cd=" & kmk_cd & " AND "

        strSQL = strSQL & "felica_timestamp LIKE " & tmp & Year(yyyymmddhhmmss) & "/"

        strSQL = strSQL & Format(Month(yyyymmddhhmmss), "00") & "/" & Format(Day(yyyymmddhhmmss), "00")

        strSQL = strSQL & "*" & tmp & " ORDER BY felica_timestamp DESC;"

 

        Set rs = db.OpenRecordset(strSQL)

       

        If rs.RecordCount > 0 Then

            

            If rs.Fields("mark") = "" Or rs.Fields("mark") = "" Then

                wk_yyyymmddhhmmss = rs.Fields("felica_timestamp")

                EXTERN_MARK = ""

            End If

       

        End If

           

        rs.Close

        Set rs = Nothing

        db.Close

        Set db = Nothing

   

    End If

 

    Set db = CurrentDb

 

    strSQL = "SELECT mark FROM T_ATTEND_DAT WHERE s_id='" & s_id & "' AND "

    strSQL = strSQL & "felica_timestamp=#" & wk_yyyymmddhhmmss & "#;"

 

    Set rs = db.OpenRecordset(strSQL)

   

    If rs.RecordCount < 1 Then

       

        strSQL = "INSERT INTO T_ATTEND_DAT(nenndo, s_id, felica_timestamp, gakka_cd, nense, kmk_cd, mark, upd_timestamp) "

        strSQL = strSQL & "VALUES(" & yyyy & ", '" & s_id & "', '" & yyyymmddhhmmss & "', " & gakka

        strSQL = strSQL & ", " & gakunenn & ", " & kmk_cd & ", '" & EXTERN_MARK & "', '" & Now() & "');"

 

        db.Execute strSQL

 

    Else

 

        rs.MoveFirst

 

        Do Until rs.EOF

           

            strSQL = "UPDATE T_ATTEND_DAT SET "

            strSQL = strSQL & "nenndo=" & yyyy & ", "

            strSQL = strSQL & "s_id='" & s_id & "', "

            strSQL = strSQL & "felica_timestamp='" & yyyymmddhhmmss & "', "

            strSQL = strSQL & "gakka_cd=" & gakka & ", "

            strSQL = strSQL & "nense=" & gakunenn & ", "

            strSQL = strSQL & "kmk_cd=" & kmk_cd & ", "

            strSQL = strSQL & "mark='" & EXTERN_MARK & "', "

            strSQL = strSQL & "upd_timestamp='" & Now() & "' "

            strSQL = strSQL & "WHERE s_id='" & s_id & "' AND "

            strSQL = strSQL & "felica_timestamp=#" & wk_yyyymmddhhmmss & "#;"

 

            db.Execute strSQL

   

            rs.MoveNext

        Loop

   

    End If

       

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

   

    record_write = True

 

End Function

 

Private Function time_tbl_chk(ByVal yyyymmddhhmmss As Date, ByVal yyyy As Integer, _

                ByVal gakka As Integer, ByVal gakunenn As Integer, _

                                ByVal day_of_the_week As Integer, ByVal jigen As Integer) As Integer

 

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim strSQL As String

Dim kbn_for_chk As Integer

 

    time_tbl_chk = -1

 

    Set db = CurrentDb

 

    strSQL = "SELECT kmk_cd, kbn FROM T_TIME_TBL WHERE nenndo=" & yyyy & " AND "

    strSQL = strSQL & "gakka_cd=" & gakka & " AND "

    strSQL = strSQL & "nense=" & gakunenn & " AND "

    strSQL = strSQL & "day_of_the_week=" & day_of_the_week & " AND "

    strSQL = strSQL & "jigen=" & jigen & ";"

 

    Set rs = db.OpenRecordset(strSQL)

    If rs.RecordCount > 0 Then

   

        If Month(yyyymmddhhmmss) >= 4 And Month(yyyymmddhhmmss) <= 9 Then

            kbn_for_chk = 1

        Else

            kbn_for_chk = 2

        End If

  

        If rs.Fields("kbn") = 0 Then

            time_tbl_chk = rs.Fields("kmk_cd")

        Else

            If rs.Fields("kbn") = kbn_for_chk Then time_tbl_chk = rs.Fields("kmk_cd")

        End If

       

    End If

 

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

 

End Function

 

Private Function record_time_chk(ByVal s_id As String, ByVal gakka As Integer, _

                        ByVal gakunenn As Integer, ByVal yyyymmddhhmmss As Date) As Integer

 

Dim day_of_the_week, yyyy, kmk_cd, i, abs_hhmm As Integer

 

    record_time_chk = -1

 

    day_of_the_week = Weekday(DateValue(yyyymmddhhmmss))

    yyyy = Year(yyyymmddhhmmss)

    If Month(yyyymmddhhmmss) >= 1 And Month(yyyymmddhhmmss) <= 3 Then yyyy = Year(yyyymmddhhmmss) - 1

    abs_hhmm = Hour(TimeValue(yyyymmddhhmmss)) * 60 + Minute(TimeValue(yyyymmddhhmmss))

    jigen = 0

   

    For i = 1 To 5

   

        If abs_hhmm >= (ABS_TIME_FROM(i) - MM_FOR_LECTURE) And abs_hhmm <= ABS_TIME_TO(i) Then

            jigen = i

            Exit For

        End If

       

    Next i

 

    If jigen = 0 Then Exit Function

   

    kmk_cd = time_tbl_chk(yyyymmddhhmmss, yyyy, gakka, gakunenn, day_of_the_week, jigen)

    If kmk_cd < 0 Then Exit Function

 

    EXTERN_MARK = "×"

   

    If abs_hhmm >= ABS_TIME_FROM(jigen) - MM_ATTENDANCE_START _

                                And abs_hhmm <= ABS_TIME_FROM(jigen) + MM_LATE_CAPA Then EXTERN_MARK = ""

    If abs_hhmm > ABS_TIME_FROM(jigen) + MM_LATE_CAPA _

                                And abs_hhmm <= ABS_TIME_FROM(jigen) + MM_FOR_ABSENCE Then EXTERN_MARK = ""

                            

    record_time_chk = kmk_cd

 

End Function

 

Private Sub get_system_info()

 

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim strSQL As String

Dim i As Integer

 

    Set db = CurrentDb

 

    strSQL = "SELECT card_reader_path, csv_file_name, times_for_normal, times_for_test, "

    strSQL = strSQL & "limit_minutes_for_attendance, limit_minutes_for_late, limit_minutes_for_absence, "

    strSQL = strSQL & "early_out_function_use, operation_error_function_use, "

   

    For i = 1 To 5

        If i <> 5 Then

            strSQL = strSQL & "st" & Format(i, "00") & "_hh, " & "st" & Format(i, "00") & "_mm, "

        Else

            strSQL = strSQL & "st" & Format(i, "00") & "_hh, " & "st" & Format(i, "00") & "_mm "

        End If

    Next i

 

    strSQL = strSQL & "FROM T_SETUP_INFO;"

   

    Set rs = db.OpenRecordset(strSQL)

 

    FELICA_DAT_PATH = rs.Fields("card_reader_path")

    FELICA_DAT_FIL_NAM = rs.Fields("csv_file_name")

 

    MM_FOR_LECTURE = rs.Fields("times_for_normal")

    MM_FOR_TESTING = rs.Fields("times_for_test")

   

    MM_ATTENDANCE_START = rs.Fields("limit_minutes_for_attendance")

    MM_LATE_CAPA = rs.Fields("limit_minutes_for_late")

    MM_FOR_ABSENCE = rs.Fields("limit_minutes_for_absence")

    FUNC_EARY_BACK = rs.Fields("early_out_function_use")

    FUNC_OPE_ERR = rs.Fields("operation_error_function_use")

 

    For i = 1 To 5

   

        ABS_TIME_FROM(i) = Val(rs.Fields("st" & Format(i, "00") & "_hh")) * 60 + Val(rs.Fields("st" & Format(i, "00") & "_mm"))

        ABS_TIME_TO(i) = ABS_TIME_FROM(i) + MM_FOR_LECTURE

 

    Next i

 

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

 

End Sub

 

Private Function get_gakka_and_gakunenn(ByVal s_id As String) As String

 

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim strSQL As String

 

    get_gakka_and_gakunenn = "NOT FOUND"

 

    Set db = CurrentDb

 

    strSQL = "SELECT gakka, gakunenn FROM T_STUDENT_MST WHERE s_id='" & s_id & "';"

    Set rs = db.OpenRecordset(strSQL)

    If rs.RecordCount > 0 Then get_gakka_and_gakunenn = rs.Fields("gakka") & "," & rs.Fields("gakunenn")

   

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

 

End Function

 

Private Function felica_student_id_cnv(ByVal f_id As String) As String

 

Dim db As DAO.Database

Dim rs As DAO.Recordset

Dim strSQL As String

 

    felica_student_id_cnv = "NOT FOUND"

 

    Set db = CurrentDb

 

    strSQL = "SELECT s_id FROM T_ID_CONV WHERE felica_id='" & f_id & "';"

    Set rs = db.OpenRecordset(strSQL)

 

    If rs.RecordCount > 0 Then felica_student_id_cnv = rs.Fields("s_id")

 

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

 

End Function

 

Private Sub CommandButton1_Click()

 

Dim felica_id, s_id, mes, buf As String

Dim fileNo, denominator, proc_cnt, kmk_cd, progress_bar_width_save, ret As Integer

Dim dat_item, tmp As Variant

 

    mes = "障害"

    mes_area.Caption = "処理中"

    CommandButton2.SetFocus

    CommandButton1.Enabled = False

    CommandButton3.Enabled = False

    progress_bar_width_save = progress_bar.Width

    progress_bar.Width = 0

    progress_bar_box.Visible = True

    progress_bar.Visible = True

 

    get_system_info

 

    proc_cnt = 0

    denominator = 0

   

    fileNo = FreeFile

    On Error GoTo EXCEPTION_SECTION

    Open FELICA_DAT_PATH & "\" & FELICA_DAT_FIL_NAM & ".csv" For Input As #fileNo

    On Error GoTo 0

   

    Do Until EOF(fileNo)

        Line Input #fileNo, buf

        denominator = denominator + 1

    Loop

    Close #fileNo

   

    If denominator <= 1 Then

        ret = MsgBox(FELICA_DAT_PATH & "\" & FELICA_DAT_FIL_NAM & ".csv" & vbCrLf & _

                        "このファイルにはデータが入っていません。", vbCritical, "CSV FILE VACANT")

        GoTo PROC_END

    End If

 

    fileNo = FreeFile

    Open FELICA_DAT_PATH & "\" & FELICA_DAT_FIL_NAM & ".csv" For Input As #fileNo

    Line Input #fileNo, buf                                 'タイトル行読み飛ばし

   

    mes_area.Caption = "処理を開始しました。しばらくお待ち下さい。"

   

    Do Until EOF(fileNo)

 

NEXT_READ:

        proc_cnt = proc_cnt + 1

        Line Input #fileNo, buf

       

        dat_item = Split(buf, ",")

        If dat_item(5) = "0" Then GoTo NEXT_READ

 

        felica_id = dat_item(4)

        s_id = felica_student_id_cnv(felica_id)

 

        If s_id = "NOT FOUND" Then

            ret = MsgBox("FeliCa ID " & felica_id & " の学生は存在しません。" & vbCrLf & _

                        "読込処理を続行しますか?", vbYesNo, "FeliCa ID NOT FOUND")

            If ret = vbYes Then GoTo NEXT_READ

            GoTo PROC_END_2

        End If

 

        tmp = get_gakka_and_gakunenn(s_id)

 

        If tmp = "NOT FOUND" Then

            ret = MsgBox("学籍番号が " & s_id & " の学生は存在しません。" & vbCrLf & _

                        "読込処理を続行しますか?", vbYesNo, "FeliCa ID NOT FOUND")

            If ret = vbYes Then GoTo NEXT_READ

            GoTo PROC_END_2

        End If

 

        tmp = Split(tmp, ",")

        gakka = tmp(0)

        gakunenn = tmp(1)

        kmk_cd = record_time_chk(s_id, gakka, gakunenn, dat_item(0) & " " & dat_item(1))

        If kmk_cd > 0 Then Call record_write(s_id, gakka, gakunenn, kmk_cd, dat_item(0) & " " & dat_item(1))

 

        mes_area.Caption = proc_cnt & "/ " & (denominator - 1) & "処理完了"

        progress_bar.Width = progress_bar_width_save * (proc_cnt / (denominator - 1))

        progress_bar.Caption = Round(proc_cnt / (denominator - 1), 2) * 100 & "%"

        DoEvents

 

    Loop

 

    mes = "正常"

 

PROC_END_2:

 

    Close #fileNo

 

PROC_END:

 

    CommandButton3.Enabled = True

    CommandButton2.Enabled = True

    CommandButton1.Enabled = True

    mes_area.Caption = "処理" & mes & "終了"

   

    Exit Sub

 

EXCEPTION_SECTION:

 

    ret = MsgBox(FELICA_DAT_PATH & "\" & FELICA_DAT_FIL_NAM & ".csv" & vbCrLf & _

                        "が見つかりません。環境確認後に再試行して下さい。", vbCritical, "CSV FILE NOT FOUND")

 

    mes = "エラー"

    GoTo PROC_END

 

End Sub

 

Private Sub CommandButton2_Click()

 

    DoCmd.Close

    DoCmd.OpenForm ("F_MAIN_MENU")

 

End Sub

 

Private Sub CommandButton3_Click()

 

    sw.Value = "NG"

    DoCmd.OpenForm "F_SETUP_ENTER", , , , , acDialog

   

    If sw.Value = "OK" Then DoCmd.OpenForm "F_SETUP_INFO", , , , , acDialog

 

End Sub

 

Private Sub Form_Load()

 

    progress_bar_box.Visible = False

    progress_bar.Visible = False

 

End Sub

PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル