Дата совпадения ошибок VBA из таблицы и дата из запроса, когда дата имеет начальный ноль, например, 01/04 или 02/04 - PullRequest
1 голос
/ 24 марта 2020

У меня есть запрос в MS Access, который называется qryRMCountStudentsBySessionWP. Результаты показаны ниже.

enter image description here

У меня есть некоторый код VBA, показанный ниже. В основном, если Timetable_Date, Timetable_Session и Location соответствуют Exam_Date, Exam_Session и Exam_Location записи в таблице с именем Invigilation, тогда вносятся изменения во время начала этой записи.

Это работает невероятно для 30/03/2020 и 31 / 03/2020 но ни одна из апрельских дат. Я думаю, что это из-за ведущих нулей, но я просто не могу понять, как это исправить. Есть идеи?

Private Sub wordProcessing()

    Dim dbs                As Database
    Dim name               As String
    Dim SQL                As String
    Dim rstAllSessions     As Recordset

    Set dbs = CurrentDb

         SQL = "SELECT Timetable_Date, Timetable_Session, Location, CountOfStudent_Ref FROM qryRMCountStudentsBySessionWP;"


    Set rstAllSessions = dbs.OpenRecordset(SQL)

    rstAllSessions.MoveFirst

    Do Until rstAllSessions.EOF  ' for each sesson update invigilation table


         If rstAllSessions.Fields(3) >= 10 Then

            If rstAllSessions.Fields(1) = "A" Then
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('08:30:00'), Notes = 'WP Exam with 10 or more students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            Else
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('13:00:00'), Notes = 'WP Exam with 10 or more students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            End If

         ElseIf rstAllSessions.Fields(3) >= 5 Then

            If rstAllSessions.Fields(1) = "A" Then
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('08:35:00'), Notes = 'WP Exam with 5 or more students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            Else
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('13:05:00'), Notes = 'WP Exam with 5 or more students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            End If

        ElseIf rstAllSessions.Fields(3) > 1 Then

            If rstAllSessions.Fields(1) = "A" Then
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('08:40:00'), Notes = 'WP Exam with >1 and <5 students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            Else
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('13:10:00'), Notes = 'WP Exam with >1 and <5 students' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            End If

        Else

           If rstAllSessions.Fields(1) = "A" Then
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('08:45:00'), Notes = 'WP Exam with 1 student' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            Else
                dbs.Execute "UPDATE Invigilation SET Start_Time = TimeValue('13:15:00'), Notes = 'WP Exam with 1 student' WHERE Invigilation.Exam_Date = #" & rstAllSessions!Timetable_Date & "# AND Invigilation.Exam_Location = " & "'" & rstAllSessions!Location & "'" & "AND  Invigilation.Exam_Session = " & "'" & rstAllSessions!Timetable_Session & "'" & ";", dbFailOnError
            End If

        End If

       '  doesn't do dates with leading 0s?????

       rstAllSessions.MoveNext

    Loop

    rstAllSessions.Close
    dbs.Close


End Sub

1 Ответ

1 голос
/ 24 марта 2020

Значения даты являются цифрами c, таким образом, нет начальных нулей. Но вы должны передать правильно отформатированные строковые выражения для значений даты при объединении:

"UPDATE Invigilation SET Start_Time = TimeSerial(13,15,0), Notes = 'WP Exam with 1 student' WHERE Invigilation.Exam_Date = #" & Format(rstAllSessions!Timetable_Date, "yyyy\/mm\/dd") & "# AND Invigilation.Exam_Location = '" & rstAllSessions!Location & "' AND  Invigilation.Exam_Session = '" & rstAllSessions!Timetable_Session & "';"
...