- ベストアンサー
ACCESSの自動連番について
ACCESS2000を使っています。 自動連番を通常すると1・2・3・・・と自動で連番を作成してくれますが、それを日付+連番というものに出来ますでしょうか? 例)1210001 1210002 | 1210100 日付は月と日にちで、連番は3桁です。 数字の連番の方は、日付が変わるとまた1に戻るようにしたいです。 何か良い方法があったら教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
入力フォームのデザインで、メニューら[表示]-->[プロパティ]で「レコード移動時」欄を クリックし、右端の ... をクリックして、「コードビルダ」で開いたウィンドウに下記 コードを貼り付けます。 レコードソースになっているテーブル名を「自動採番月日TBL」とし、自動採番する フィールドは、数値型で名前を「ID」とした場合です。 これで、ご希望通りの動作になると思いますが、年が入っていないのが気になります。 このままでは、1年以上使っていると、昨年の番号の連番を取得します。 年を考慮することをお勧めします。 Private Sub Form_Current() If Me.NewRecord = False Then Exit Sub Dim AutoID As String Dim MaxID As Variant AutoID = Format(Date, "mmdd") MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)=" & AutoID) If IsNull(MaxID) Then Me.ID.DefaultValue = AutoID & "001" Else Me.ID.DefaultValue = AutoID & Format(Right(MaxID, 3) + 1, "000") End If End Sub
その他の回答 (1)
- yomo3
- ベストアンサー率32% (88/269)
お求めの結果をテーブルの一つのフィールドの設定で出すのは無理だと思います。 画期的な方法は思いつかないのだけれど、以下参考になれば、と思います。 まず、乗り越える壁として日付が変わったという判定をどのように行うかという問題があります。 一般的には、直前の日付を調べて異なっていたら日付が変わったと見なすという方法が採られます。 日付のフィールドをカウントの日付と別に作って、規定値を「=Format(Now(),"yyyy/m/d")」とか「=Val(Format(now(),"ddmm"))」のように設定すると、後の処理が楽になります。 前者は日付形式で時刻を取ったもの、後者は連番フィールド用に数値化したものです。 その日付フィールドの値を、直前のレコードと比較します。 で、カウンタフィールドも別に設定して、日付が変わったら初期化するカウンタにします。 こちらはフォームのイベントで処理するしかないように思います。 詳しいことは省きます。 要点は、日付が変わったら初期化する。そうでなかったら直前の値に+1する。という処理を更新後処理に書き込むと言うことです。 別のアイディアとして、自動連番のフィールドから読みとるという方法があります。 この場合は、別のテーブルに日付が変わった最初の連番を登録しておきます。 日付と連番の先頭を登録するのです。 そのテーブルに登録されていない日付のときはそのレコードの連番を新規に登録します。 登録されていれば、その番号と連番の差+1が現在のカウンタ値になります。 これをお求めのフィールドに設定すればOKです。 が、これらの処理もフォームでのイベント処理にしなければなりません。 めんどくさいですな。
お礼
ありがとうございます。 教えていただいたアイデアを元に考えてみようと思います。
お礼
ありがとうございます。 教えていただいた方法をさっそく試してみましたが、あっという間に目的の事が出来ました。 年は考慮してやろうと思います。 本当にありがとうございました。