0

假设如下:

(忽略“创建表”段中的错误 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 上的索引,以确保没有 Participant 可以为一个 Event 多次记录

假设,也

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

同样,没有 PK:只有 Event_Name 是唯一索引

date1=[查询参与者 Event1 的特定到达时间]

date2=[Query to get Event1's specific Start_Time](你可能已经注意到,date2 是单数)

我想根据多个条件运行更新查询并使用它更改一些数据,其中我只卡在以下条件上

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

(此特定条件应检查是否有人迟到)

我坚持的是,如何为所有参与者以分钟为单位做这个日期/时间差异?

当 date1 是单行时,我可以使它工作,但是在多行时,它说“可以获取最多一行”或类似的东西。

4

1 回答 1

0
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 解决了我的问题,并且希望有任何建议,如何使它更优雅。我觉得可以改进此代码以使其看起来更好,但现在不知道如何。

于 2018-10-01T20:31:56.417 回答