MS Access Datediff с несколькими аргументами date1 и date2 - PullRequest
0 голосов
/ 26 сентября 2018

Допустим следующее:

(Не обращая внимания на неверный синтаксис sql в сегментах «создать таблицу», я упрощаю сообщение для лучшего понимания)

Create table Event_Participants ( 
Event_Name, text
Event_Participant, text
Event_Participant_Arrival, date/time
Event_Participant_Leaving date/time
)

Естьнет PK, только индекс для Event_Name и Event_Participant, чтобы убедиться, что ни один участник не может быть зарегистрирован более одного раза для одного события .

Предположим, также

Create table Events (
Event_Name, text
Event_Start_Time, date/time
Event_End_Time, date/time
)

Опять же, нет PK: Только Event_Name является уникальным индексом

date1 = [Запрос, чтобы получить конкретное время прибытия участника для Event1]

date2 = [Запрос, чтобы получить конкретный Event1Start_Time] (как вы могли заметить, date2 - единственное число)

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

where DateDiff("n",date1,date2)<0

(Это конкретное условие должно проверять, опаздывает ли кто-либо) .

То, что я застрял, это как сделать эту разницу в дате и временив минутах для всех участников?

Я могу сделать этоk когда date1 является одной строкой, но для нескольких, она говорит «может извлечь максимум одну строку» или что-то в этом роде.

1 Ответ

0 голосов
/ 01 октября 2018
Dim rs As DAO.Recordset
Dim qry, points, pp As String
Dim pts As Integer

pp = Me.Form.cbo_query_picker.Value
Set rs = CurrentDb.OpenRecordset("SELECT DateDiff('n',IIf([Arrival Date]<=(SELECT Start_Date FROM Events WHERE Descriptive_Name='" & pp & "'),(SELECT Start_Date FROM Events WHERE Descriptive_Name='" & pp & "'),[Arrival Date]),IIf([Quitting Date]>=(SELECT End_Date FROM Events WHERE Descriptive_Name='" & pp & "'),(SELECT End_Date FROM Events WHERE Descriptive_Name='" & pp & "'),[Quitting Date])) AS pts, Event_Participants.Participant, Event_Participants.[Event Name] FROM Event_Participants")
rs.MoveFirst
Do Until rs.EOF = True
    pts = Int(rs("pts").Value / 30) * 3
    qry = "update customers set points = points + "
    qry = qry & Format(pts, "0")
    qry = qry & " where [Customer name] = '"
    qry = qry & rs("Participant") & "'"
    CurrentDb.Execute (qry)
    Debug.Print qry
    rs.MoveNext
Loop
rs.Close

Это код VBA, который я, наконец, скремблировал, чтобы сделать доступ доступным, как любой стандартный диалект SQL.Хотя я признаю ответ @Wolfgang Kais, вместо этого я решил свою проблему с помощью VBA и был бы благодарен за любое предложение, как сделать это более элегантным.Мне кажется, этот код можно улучшить, чтобы он выглядел лучше, но пока не знаю, как.

...