我有一个宏,该宏使用在用户窗体中创建的动态日历记录员工的缺勤情况。当员工选择缺勤类型时,他们可以输入开始日期和结束日期(对于缺勤时间超过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
有人可以建议如何做吗?
谢谢。
答案 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]);