如何创建一个表,其中字段是Access 2010中一年中的几天?

问题描述 投票:1回答:2

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

我想要这个的原因是为了使每周,每月和年初至今(YTD)计算更容易。理想情况下,我想要的是一组表来表示年度日,月和年表。每个字段将在它们代表的日期之后立即自动填充。

示例:在天数表中,我们看到相邻的字段7/9/2012和7/10/2012。一旦内部时钟到达7/10/2012,则7/9/2012字段将填充来自其他字段的数据计算结果。

同样会持续数月和数年。

ms-access ms-access-2010 datefield
2个回答
3
投票

我只是想知道是否有一种简单的方法来创建一个表,并在一年中的每一天都有一个字段,而不需要365条目。

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

创建一个包含365个字段的Access表(闰年怎么样?!)并不容易。这是不可能的,因为Access表中的最大字段数是255。

如果你愿意在一年中适应这个限度的一年中,那么每个日期的一个列表对我来说似乎仍然是个坏主意。

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

表的大小不应该是一个大问题:<=每年366行,但那些可以是窄行。

如果问题是加载给定年份的所有日期的负担,那么这种负担可能非常微不足道。只需运行这个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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.