1

したがって、質問はほとんどすべてタイトルにあります。テーブルを作成し、365 エントリを実行せずに 1 年の各日にフィールドを作成する簡単な方法があるかどうか疑問に思っていました。

これが必要な理由は、週単位、月単位、年初来 (YTD) の計算を簡単にするためです。理想的には、年間通算日、月、そして年テーブルを表す一連のテーブルが必要です。各フィールドは、それらが表す日付の直後に自動的に入力されます。

例: Days テーブルには、隣接するフィールド 7/9/2012 と 7/10/2012 が表示されます。内部クロックが 2012 年 7 月 10 日に達すると、2012 年 7 月 9 日のフィールドには、他のフィールドから計算されたデータが入力されます。

何ヶ月も何年も同じことが言えます。

4

2 に答える 2

3

テーブルを作成し、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
于 2012-07-09T18:51:37.873 に答える
0

Excel で開始し、必要な日付範囲と列をクリックしてドラッグし、Excel とデータベース間の接続をインポート/確立できませんでしたか? すばやく、簡単に、コーディングは不要です。リンクを試していませんが、Excel シートにリンクし、Excel シートで日付関数を使用して、接続の更新時にこの更新を自動的に行うことができると思います。

PS私は決して専門家ではありません。より良い方法があれば教えてください。

于 2016-12-12T16:22:01.600 に答える