我只是想知道是否有一种简单的方法可以创建一个表格并在一年中的每一天都有一个字段,而无需执行 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