この人頭いいなと思ったエピソード

Microsoft Accessで下記のようなデータベースを作っています。
テーブル名:TB_受付
テーブルデザイン
受付番号:テキスト型
受付日:日付/時刻型(yyyy/mm/dd)
番号:数値型
コース種類:テキスト型
備考:テキスト型

テーブルイメージ
受付番号    受付日    番号  コース種類  備考
------------------------------------------------------------
20051201受付1   2005/12/01   1
20051201受付2   2005/12/01    2
20051201受付3   2005/12/01    3
・     ・
・                   ・
20051202受付1    2005/12/02

というように、受付日が変わると番号が1に戻るような採番をしたいのです。
上記テーブルを元に作成したフォームで、
受付日にはDate関数でその日の日付が入るようにしています。
フォームの更新前処理に下記のコードをいれています。
Private Sub Form_BeforeInsert(Cancel As Integer)
If DCount("番号", "TB_受付") = 0 Then
Me![番号] = "1"
Else
Me![番号] = Format(DMax("番号", "TB_受付") + 1)
End If
End Sub

さらにコース種類の更新後処理に
Me![受付番号]=Format("受付日,"TB_受付")&"受付"&Format("番号","TB_受付")
というコードを書いて日付&番号が、[受付番号]のところに表示されるようにいろいろやっているのですが、日付が変わると番号をリセットさせることがなかなかできません。

VBAはあまり理解できている方ではないのですが、いろいろ検索をしたり調べたりしてたどり着いたのが上記です。
日付でリセットされる採番をするにはあと何をすればよいか、もしくは根本からこうしたほうがいいというのがあれば、とも思うのですが
詳しい方に教えていただけないでしょうか?

A 回答 (3件)

フォームの名前を”受付フォーム”、フォーム上のコントロールを”日付”として説明します。


下記DCountの値は、テーブル"TB_受付”の受付日と”日付”の値とが等しいレコード数+1になります。

Me![番号] = DCount("[番号]", "[TB_受付]", "[受付日]=Forms![受付フォーム]![日付]") + 1

フォーム上のコントロールやどのイベントで処理するかなどは、これの応用で考えてください。
(なお、上記プログラムは、ACCESS97で確認しました。)
    • good
    • 2
この回答へのお礼

早速のご回答をありがとうございます!
コース種類の更新後処理に私が書いていたコードの前にこれを書いたら、うまく行きました!目からうろこです。
教えていただくとなるほど!ととても納得いくのですが、どういう条件にしたらいいかなかなか思いつきません。
2週間ほどいろいろ試していましたが、出来上がってうれしいです。(12月中に作りたかったので)本当に助かりました。

お礼日時:2005/12/16 00:48

すみません。


Upする前にも考えてのですが、見落としがありました。

> コントロールの更新→フォームの更新
の部分は、
コントロールの更新→フォームの更新→レコードソースの更新
となります。
    • good
    • 0
この回答へのお礼

akipapaさま、Dxakさま
私のつたない質問に早速ご回答いただいてどうもありがとうございました。こんなに早く解決するとは感激です。
また(?)よろしくお願い致します。

お礼日時:2005/12/16 00:57

更新していく順番を考えて見ましょう。



コントロールの更新→フォームの更新
となってます、要するに「コース種類の更新後処理」では、番号はまだ入っていません。

こういえば、「コース種類の更新後処理」で、如何すればよいかなんとなく想像はつくでしょうか?

「日付が変われば・・・」と言うのは、D系の関数で#1さんが記載するように、条件を追加すれば可能です。

但し、フォームのレコードソースに使用している名前と、フォームのコントロールの名前が一致するとどちらを優先的に値を持ってくるでしょう?
Controls を使用して明示的に記載するか、名前を違うものかにされた方が、よろしいかと思います。
    • good
    • 0
この回答へのお礼

根本的なことを教えていただいてありがとうございます!
コードは上から順番に動いて更新されるのかなぁと思っていました。
フォームの更新に番号をつけても、コース種類の更新後処理では番号が入らなかったわけなんですね。
フォームの更新前処理に私が書いたコードをANo.1の方にご回答いただいたコードに変更しても番号が入らなかったので、??と思ってました。
いれる場所も大事なんですね。
コントロールの更新→フォームの更新→レコードソースの更新
を覚えておくようにします。どうもありがとうございます。

お礼日時:2005/12/16 00:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A