【发布时间】:2018-04-15 11:20:57
【问题描述】:
我需要在 MS Access 中创建一个表,然后根据用户提供的日期范围(StartDate、EndDate)附加带有 DATES 的列作为字段名称,如下所示:
姓氏 |名字 |角色 | 2017 年 10 月 1 日 | 2017 年 10 月 2 日 | ....
以下 sn-p 接近,但只能使用格式为“Oct01”(mmmdd)的日期,而不是所需的“10/01/2017”。我发誓我最早的尝试确实产生了所需的日期格式作为字段名称,但我似乎无法重现 - 猜测“格式”的语法问题;
Dim db As Database
Dim StartDate As Date
Dim EndDate As Date
Dim strDate As String
Set db = CurrentDb
StartDate = #10/1/2017#
strDate = Format(StartDate, "mmmdd")
db.Execute "CREATE TABLE MyTable " & _
"(LastName CHAR, FirstName CHAR, Role CHAR);"
db.Close
CurrentDb.Execute "ALTER TABLE myTable ADD COLUMN " & Format(StartDate, "mmmdd") & " CHAR"
StartDate = StartDate + 1
CurrentDb.Execute "ALTER TABLE myTable ADD COLUMN " & Format(StartDate, "mmmdd") & " CHAR"
...
【问题讨论】:
-
请注意,将日期作为字段名称是非规范化数据库的明确指标。通常,您可以通过对数据库进行适当的规范化来避免这种需要,并且通常会使您的数据库在此过程中更易于使用。
-
Erik,澄清一下,我正在针对水平时间线记录特定事件。本质上是一个水平日历时间线。这是一个可视化工具/表单,可帮助我们的调度员查看资源在其日历中的哪些位置有开放日。只读“日历视图”是根据另一个表中的规范化数据即时构建的。
-
请注意,这会破坏规范化(请参阅stackoverflow.com/questions/10768696/…)。正如那里所讨论的,有一些反对规范化的论据,我经常通过缓存需要数小时的查询结果来打破这条规则。但您可能需要考虑使用交叉表查询来生成此数据。