テーブルを作成し、365 エントリを実行せずに 1 年の各日用のフィールドを作成する簡単な方法があるかどうか疑問に思っていました。
あなたが何を考えているのか正確にはわかりませんが、正しい答えは「いいえ、簡単な方法はありません」であると確信しています。:-)
365 個のフィールド (閏年はどうなる!?) を含む Access テーブルを作成するのは簡単ではありません。Access テーブルのフィールドの最大数が 255 であるため、それは不可能です。
その制限内に収まる年の一部に落ち着くつもりなら、各日付の列を含むテーブルは、私には依然として非常に悪い考えのように思えます.
OTOH、日付ごとに 1 行のカレンダー テーブル (「列は高価、行は安価」) は非常に便利です。なぜあなたが明らかにそのアプローチを拒否したのか、私には理解できません。
テーブルのサイズは大きな問題ではありません: <= 1 年あたり 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