【问题标题】:MS Access - Date as Table Field NameMS Access - 日期作为表字段名称
【发布时间】: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/…)。正如那里所讨论的,有一些反对规范化的论据,我经常通过缓存需要数小时的查询结果来打破这条规则。但您可能需要考虑使用交叉表查询来生成此数据。

标签: ms-access vba


【解决方案1】:

将字段名称括在方括号中,如下所示:

  CurrentDb.Execute "ALTER TABLE myTable ADD COLUMN [10/02/1017] CHAR"

方括号允许您在标识符中使用空格或其他特殊字符。您需要确保在任何其他 SQL 语句中引用字段名称时也使用方括号。

即使您可以这样做,也不建议在标识符名称中使用特殊字符。

【讨论】:

  • 谢谢马克!这就是我想要的。感谢您谨慎地通过 SQL 调用这些。
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2017-05-13
相关资源
最近更新 更多