【问题标题】:How to Create a table where fields are days of the year in Access 2010?如何在 Access 2010 中创建字段为一年中的天数的表?
【发布时间】:2018-08-30 15:46:47
【问题描述】:

所以问题几乎都在标题中。我只是想知道是否有一种简单的方法可以创建一个表格并在一年中的每一天都有一个字段,而无需执行 365 个条目。

我想要这样做的原因是为了更轻松地进行每周、每月和年初至今 (YTD) 的计算。理想情况下,我想要的是一组表来表示一年中的天数、月份,然后是年表。每个字段将在它们所代表的日期之后立即自动填写。

示例:在“天数”表中,我们看到相邻的字段 7/9/2012 和 7/10/2012。一旦内部时钟达到 2012 年 7 月 10 日,2012 年 7 月 9 日字段将填充从其他字段计算的数据。

几个月甚至几年都是如此。

【问题讨论】:

  • 为什么在上一个问题stackoverflow.com/questions/11368134/… 之后又回到三表的想法?
  • 数字表上的一些注释:stackoverflow.com/questions/8676637/…
  • @Remou 我可以使用一个表,但正如我所问的,主要问题是有一种简单的方法可以在 Access 中创建这样的表吗?因为我不想花时间创建 365+ 字段。
  • @Remou 我的情况有点复杂。我正在创建一个设备可用性数据库。所以我有一个表 代表设备,以及维护周期。这个新表格将跟踪用于报告的每日可用性。但是设备可能一天会出现几次故障,或者维修表可能有错误的信息。这意味着可用性表需要从多条记录中拉取并且需要自行调整。这是我不确定如何处理的地方。

标签: ms-access ms-access-2010 datefield


【解决方案1】:

我只是想知道是否有一种简单的方法可以创建一个表格并为一年中的每一天设置一个字段,而无需进行 365 个条目。

尽管我不确定您的想法到底是什么,但我相当肯定正确答案是“不,没有简单的方法”。 :-)

创建一个包含 365 个字段的 Access 表(闰年呢?!)绝非易事。这是不可能的,因为 Access 表中的最大字段数是 255。

如果您愿意接受一年中符合该限制的部分时间,那么在我看来,每个日期都有一列的表格仍然是一个非常糟糕的主意。

OTOH,每个日期一行的日历表(“列很昂贵;行很便宜”)可能非常有用。我不明白你为什么显然拒绝了这种方法。

表的大小应该不是一个大问题:每年 窄行。

如果问题是加载给定年份的所有日期的负担,那么这个负担可能非常微不足道。只需运行这个LoadCalendar 程序。如果没有任何参数,它会将当前年份的日期加载到名为 the_date 的日期/时间字段中,该字段位于名为 tblCalendar 的表中。您可以使用参数替换不同的年份、表格或字段。

Public Sub LoadCalendar(Optional ByVal pYear As Integer, _
        Optional ByVal pTable As String = "tblCalendar", _
        Optional ByVal pField As String = "the_date")
    Dim db As DAO.Database
    Dim dte As Date
    Dim dteLast As Date
    Dim intYear As Integer
    Dim rs As DAO.Recordset
    Dim strMsg As String

On Error GoTo ErrorHandler

    intYear = IIf(pYear = 0, Year(Date), pYear)
    dte = DateSerial(intYear, 1, 1)
    dteLast = DateSerial(intYear, 12, 31)

    Set db = CurrentDb
    Set rs = db.OpenRecordset(pTable, dbOpenTable, dbAppendOnly)

    Do While dte <= dteLast
        rs.AddNew
        rs.Fields(pField).value = dte
        rs.Update
        dte = dte + 1
    Loop
    rs.Close

ExitHere:
    On Error GoTo 0
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

ErrorHandler:
    strMsg = "Error " & Err.Number & " (" & Err.Description _
        & ") in procedure LoadCalendar"
    MsgBox strMsg
    GoTo ExitHere
End Sub

如果您想一次性加载多年,只需在“即时”窗口中执行以下操作:

for yr = 2000 to 2012 : LoadCalendar yr : next

【讨论】:

  • 我在上面发布了一个简单方法的链接Some notes on a numbers table :)
  • @Remou 你的意思是“一年中的每一天都有一个字段”的简单方法吗?我认为 OP 意味着每个日期都有单独的字段:fld_20120709; fld_s0120710;等等。这对我来说似乎很可怕。
  • 哇!我没看错,我的脑海里一定是从除了每天之外的任何东西的整个想法上跑掉了!
【解决方案2】:

您不能从 excel 开始,单击并拖动所需的日期范围和列,然后在 excel 和您的数据库之间导入/建立连接吗?快速,简单,无需编码。我相信您可以链接到 Excel 工作表并使用 Excel 工作表中的日期函数在连接刷新时自动进行此更新,尽管我没有尝试链接。

附:我绝不是专家,如果有更好的做法,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2015-06-27
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多