Как отформатировать DayTime в качестве дня недели среднего времени при доступе - PullRequest
0 голосов
/ 19 февраля 2020

Я пробовал некоторые SQL в Access, но когда я пытаюсь отформатировать тип данных Date/Time, чтобы я мог ввести день недели и среднее время для моих переменных.

Например, я хочу иметь возможность ввести что-то вроде: Mon 1:00 PM.

Я попытался отформатировать тип данных как ddd h:nn AM/PM, но когда я пытаюсь ввести значение, система выдает мне ошибка, указывающая, что ввод не соответствует моему формату.

Я также попытался автоматически заполнить ввод, щелкнув календарь рядом с полем ввода и выбрав дату, но таким образом я не могу отформатировать время.

Любая помощь будет оценена.

Я не добавил ни картинки, ни код, потому что не думаю, что это необходимо для ответа на вопрос. Если что-то нужно, я более чем готов предоставить их.

Спасибо

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вы можете использовать форму, привязанную к таблице с двумя несвязанными элементами управления, для отображения и изменения дня недели и времени - как этот макет:

Mock up

Два текстовых поля сверху связаны с идентификатором и полем даты / времени таблицы / запроса.

При открытии формы комбинированный список будет заполняется днями недели, и вычисляется первая дата недели.

В событии OnCurrent в поле со списком будет установлен день недели, а в текстовом поле - время. Изменение любого из них приведет к обновлению текущей записи.

В поле со списком необходимо установить ValueList как RowSource и скрыть первый столбец (установить ColumnWidths до: 0; )

Текстовое поле Время может иметь Формат : Краткий формат времени

Код формы будет быть:

Option Compare Database
Option Explicit

Private FirstDate       As Date
Private FirstWeekDay    As VbDayOfWeek

Private Sub Form_Current()

    Me!Weekday.Value = DatePart("w", Me!Date.Value)
    Me!Time.Value = TimeValue(Me!Date.Value)

End Sub

Private Sub Form_Load()

    Dim DayOfWeek       As VbDayOfWeek
    Dim LastWeekDay     As VbDayOfWeek
    Dim RowSource       As String

    FirstDate = DateAdd("d", Date, 1 - DatePart("w", Date, vbUseSystemDayOfWeek))
    FirstWeekDay = DatePart("w", FirstDate, vbUseSystemDayOfWeek)

    For DayOfWeek = 1 To 7
        RowSource = RowSource & """" & (FirstWeekDay - 1 + DayOfWeek) Mod 7 + 1 & """;""" & Format(DateAdd("d", DayOfWeek - 1, FirstDate), "dddd") & """;"
    Next
    Debug.Print RowSource
    Me!Weekday.RowSource = RowSource

End Sub

Private Sub Time_AfterUpdate()

    UpdateDate

End Sub

Private Sub Weekday_AfterUpdate()

    UpdateDate

End Sub

Private Sub UpdateDate()

    Me!Date.Value = DateAdd("d", (Me!Weekday.Value - 1 - FirstWeekDay + 7) Mod 7, FirstDate) + Nz(Me!Time.Value, #12:00:00 AM#)

End Sub
1 голос
/ 19 февраля 2020

Вы не можете ввести дату / время в форматированном макете / тексте.

Хотя значение даты / времени отображается в соответствии с вашим свойством «Формат», оно меняется, как только вы перемещаете курсор в поле или щелкните в нем.

Затем вы должны ввести его обычным способом, то есть дату и при желании время за ней.

С календарем вы можете ввести только дату К сожалению нет времени. Вам нужно будет ввести время в поле самостоятельно после того, как вы выберете дату.

Единственный способ, которым я вижу, чтобы ввести отформатированную дату / время, это написать подпрограмму VBA, которая интерпретирует ваш ввод и помещает правильно отформатированный обычный текст в текстовое поле.

...