次の方法で共有

自動管理番号の作成

Anonymous
2014-09-03T07:21:27+00:00

アクセスにて見積書のデータベースを作成しています。

業務管理番号は手入力していたのですが、上司より業務管理番号は自動作成してほしいと要望がありました。

そこで、業務管理番号の自動作成方法を教えて下さい。

管理番号のルールは下記の様にしています。

O-yymmxxxx

yy:西暦の下桁

mm:月の2桁表示

xxxx:月毎のシリアル番号

例)O-14090003  2014年9月の0003番

管理番号なので重複はできません。 また、下4桁はシリアル番号なので最後に+1した数値になります

どなたか、宜しくお願い致します。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2014-09-04T15:04:23+00:00

MukkuMukuです。

テーブル上のフィールドの既定値 / Default Value プロパティでは、テーブル / フィールド の参照はできません。ダイアログを見た通りで、[式の要素] で テーブル および フィールド が選択できませんよね。同時に定義域関数も使用できないということです。

なので、このような場合で演算結果を既定値っぽく使用する場合、フォーム上のコントロールの既定値 / Default Value プロパティで指定するか、フォームのイベント Form.BeforeUpdate イベント (Access)でフィールドの値を設定することがよいかと思います。また、値が重複しない設定になっているので、Form.BeforeInsert イベント (Access) も可だと考えられますが、いずれの場合であっても複数ユーザの操作によって発生する事象について確認されればよいかと思います。

サンプルなのでアレンジしてください。

キャプチャが読みにくいので、式 / 値を 補完しときます。

"O-" & Format(Date(),"yymm")

Nz(DMax("業務管理番号","業務テーブル","業務管理番号 like '" & [LocalVars]![O_yymm] & "*'"),[LocalVars]![O_yymm] & "0000")

=[LocalVars]![O_yymm] & Format(Right([LocalVars]![max_serial],4)+1,"0000")

今のところ大きな影響はないでしょうけど、主キーに自然キーを使用しないほうがよいかもです。"業務管理番号"ってビジネスルールの変更に影響を受けやすい性質がありそうなので。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-09-05T01:17:18+00:00

    MukkuMukuさん、

    回答有難う御座います。

    うまくいきました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2014-09-04T01:53:14+00:00

    MukkuMukuさん、

    早速の回答有難うございました。

    定義域関数(DMax)はアクセスの式ビルダーでは見つかりませんでした。

    管理用の番号を整形するには、yymm の部分は、日付に関する関数で求めて

    Date() から作成する場合、"O-" & Format(Date(),"yymm") & Format([シリアル],"0000")

    、"O-" & Format(Date(),"yymm") の部分はうまくいきますが、

    、"O-" & Format(Date(),"yymm") & Format([シリアル],"0000")にすると下記のエラーが発生します

    この時、シリアルフィールドの設定は下記の様にしています。

    また”質問の一番知りたいところというところがよくわからないけど。”

    説明が不十分で私が行いたい内容が伝わっていないようなので追記します。

    現在、下記の様な業務管理番号を付けています。番号の説明は前回説明した通りです。

    上記のテーブルに直接入力する場合は次の管理番号は何を入れれば良い****かりますが、

    今作成中のデータ入力フォームは下記の入力フォームを使っています。このフォームではいくつを入れれば良い****かりません。

    そこで、新規追加の場合は自動で番号が表示される様にしたいと言う事です。

    私はまだ初心者なので、アクセスのフォームを使う方法しか分りません。この時、最低限、最後に取られた番号が解れば+1すれば良いのですが、出来れば+1された番号を表示しEnterすれば良い状態にしたいのです。

    以上、宜しくお願い致します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-09-03T13:14:34+00:00

    MukkuMukuです。

    Access アプリケーションの 仕様にもよるかと思います。

    単一ユーザの使用、もしくは、レコードの追加操作がほぼ単一ユーザなどで複数ユーザによるレコード追加作業がない場合、定義域関数(DMax など)でシリアル番号の最大値を取得して、それに +1

    した値を新規レコードのシリアル値にする感じ。

    複数ユーザによる同時追加作業が発生する場合、排他制御を考慮しなければならない。

    採番用のテーブルを持たせるとよいかもですね。

    管理用の番号を整形するには、yymm の部分は、日付に関する関数で求めて

     Date() から作成する場合、"O-" & Format(Date(),"yymm") & Format([シリアル],"0000")

    質問の一番知りたいところというところがよくわからないけど。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません