MS Access根据开始日期和结束日期创建日期范围

时间:2018-09-28 16:59:12

标签: ms-access

我有一个宏,该宏使用在用户窗体中创建的动态日历记录员工的缺勤情况。当员工选择缺勤类型时,他们可以输入开始日期和结束日期(对于缺勤时间超过1天),也可以单击日历的单元格以选择特定日期。然后,此信息将发送到Access数据库,在该数据库中存储该信息并用于生成报告。

我的问题是,人们发现单击要在其后申请缺勤的日期更容易,而不是手动输入开始日期和结束日期。我现在看到设计可以进行改进...

此操作对数据库的影响是数据库中有许多“冗余”记录。对于那些有视觉能力的人来说,这是一个示例,该示例说明了数据库现在的样子以及可能的样子:

当前方式(糟糕的方式):

EmployeeName   AbsenceType   StartDate    EndDate
============   ===========   ==========   ==========
Employee1      Vacation      2018-09-24   2018-09-24
Employee1      Vacation      2018-09-25   2018-09-25
Employee1      Vacation      2018-09-26   2018-09-26
Employee1      Vacation      2018-09-27   2018-09-27
Employee1      Vacation      2018-09-28   2018-09-28

希望的方式(更好的方式)

EmployeeName   AbsenceType   StartDate    EndDate
============   ===========   ==========   ==========
Employee1      Vacation      2018-09-24   2018-09-28

有人可以建议如何做吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以像这样使用笛卡尔查询:

SELECT DISTINCT 
    [Tens]+[Ones] AS Factor, 
    10*Abs([Deca].[id] Mod 10) AS Tens, 
    Abs([Uno].[id] Mod 10) AS Ones
FROM 
    MSysObjects AS Uno, 
    MSysObjects AS Deca;

将其另存为 qdyFactor 并创建另一个查询以生成日期:

SELECT DISTINCT 
    PersonID, 
    DateAdd("d",[Factor],[Start Date]) AS [First Date],
    [End Date]
FROM 
    tblTable,
    qdyFactor
WHERE 
    qdyFactor.Factor Between 0 And DateDiff("d",[Start Date],[End Date]);