
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はあまり理解できている方ではないのですが、いろいろ検索をしたり調べたりしてたどり着いたのが上記です。
日付でリセットされる採番をするにはあと何をすればよいか、もしくは根本からこうしたほうがいいというのがあれば、とも思うのですが
詳しい方に教えていただけないでしょうか?
No.1ベストアンサー
- 回答日時:
フォームの名前を”受付フォーム”、フォーム上のコントロールを”日付”として説明します。
下記DCountの値は、テーブル"TB_受付”の受付日と”日付”の値とが等しいレコード数+1になります。
Me![番号] = DCount("[番号]", "[TB_受付]", "[受付日]=Forms![受付フォーム]![日付]") + 1
フォーム上のコントロールやどのイベントで処理するかなどは、これの応用で考えてください。
(なお、上記プログラムは、ACCESS97で確認しました。)
早速のご回答をありがとうございます!
コース種類の更新後処理に私が書いていたコードの前にこれを書いたら、うまく行きました!目からうろこです。
教えていただくとなるほど!ととても納得いくのですが、どういう条件にしたらいいかなかなか思いつきません。
2週間ほどいろいろ試していましたが、出来上がってうれしいです。(12月中に作りたかったので)本当に助かりました。
No.3
- 回答日時:
すみません。
Upする前にも考えてのですが、見落としがありました。
> コントロールの更新→フォームの更新
の部分は、
コントロールの更新→フォームの更新→レコードソースの更新
となります。
akipapaさま、Dxakさま
私のつたない質問に早速ご回答いただいてどうもありがとうございました。こんなに早く解決するとは感激です。
また(?)よろしくお願い致します。
No.2
- 回答日時:
更新していく順番を考えて見ましょう。
コントロールの更新→フォームの更新
となってます、要するに「コース種類の更新後処理」では、番号はまだ入っていません。
こういえば、「コース種類の更新後処理」で、如何すればよいかなんとなく想像はつくでしょうか?
「日付が変われば・・・」と言うのは、D系の関数で#1さんが記載するように、条件を追加すれば可能です。
但し、フォームのレコードソースに使用している名前と、フォームのコントロールの名前が一致するとどちらを優先的に値を持ってくるでしょう?
Controls を使用して明示的に記載するか、名前を違うものかにされた方が、よろしいかと思います。
根本的なことを教えていただいてありがとうございます!
コードは上から順番に動いて更新されるのかなぁと思っていました。
フォームの更新に番号をつけても、コース種類の更新後処理では番号が入らなかったわけなんですね。
フォームの更新前処理に私が書いたコードをANo.1の方にご回答いただいたコードに変更しても番号が入らなかったので、??と思ってました。
いれる場所も大事なんですね。
コントロールの更新→フォームの更新→レコードソースの更新
を覚えておくようにします。どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
ACCESSの自動連番について
Access(アクセス)
-
-
4
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
5
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
6
ACCESS クエリで1から順番に番号を表示したい
Access(アクセス)
-
7
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
8
Access DCountでの連番について
Access(アクセス)
-
9
ACCESS VBA レコードセットの参照方法について
その他(データベース)
-
10
access vbaにてテンポラリーテーブルが作りたいです。
Access(アクセス)
-
11
デザインビューにてテーブルが表示されない
Word(ワード)
-
12
Accessで条件が2つのグループに連番をふる
Access(アクセス)
-
13
Access 文字+年ごとの自動採番
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
access 自動採番 「10-AA-000...
-
Accessで日付が変わると番号が...
-
社員DBを作る
-
ADO VBA 実行時エラー3021
-
GROUP BYを行った後に結合した...
-
実績累計の求め方と意味を教え...
-
ヘッダレコードとトレーラレコ...
-
select句副問い合わせ 値の個...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
エラー2「無効な識別子です」
-
CREATE テーブルでの複数外部...
-
ACCESSで大量の更新を行うと「...
-
データセットのレコード更新が...
-
ワードの差込印刷で教えて下さ...
-
レコードが存在しなかった場合
-
SQL文で右から1文字だけ削除す...
-
エラー「無効な識別子です」
-
SQLPLUSにて演算子を使う方法と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
最新の日付とその金額をクエリ...
-
Accessで日付が変わると番号が...
-
access 自動採番 年が変わる...
-
SELECT * FROM `生徒名簿` INNE...
-
vba 直前の操作はキャンセルさ...
-
accessのテーブルから条件の抽...
-
sqlで質問です。 Aテーブルの登...
-
〜のような結果を出すためのSQL...
-
社員DBを作る
-
条件をつけて日付の古い行を抜...
-
Accessでのレコード存在チェック
-
【アクセスVBA】テーブルにフィ...
-
【SQL】existsでの商演算
-
質問です。 下記のテーブルとデ...
-
主キーの選び方
-
access 自動採番 「10-AA-000...
-
Access 文字+年ごとの自動採番
-
Access VBAで更新履歴を追いたい
-
MySQLで桁あふれを防ぐ方法
おすすめ情報