|
>管理番号を生成するにはどうすればいいでしょうか?
まず、第一の方法です。
アクセスでは、00からZZまでの値を格納するテーブルを作るのが
一般的だと思います(工程1−1)。
テーブル名:T部品項目
フィールド:部品項目ID 整数型 主キー
部品項目 テキスト型
部品項目ID 部品項目
1 00
2 01
3 02
100 99
101 A0
他方、Aフォームのレコードソースがテーブル「A」だとすると、
「A」テーブルに「部品項目ID」という整数型のフィールドを設けます。
そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
「A」テーブルの「部品項目ID」フィールドの最大値を取得し(DMax関数)、
これに1を加えたものを当該レコードの「部品項目ID」フィールドの値とします。
この処理はVBAを使う必要があります(工程1−2)。
そして、Aフォームのレコードソースは、
「A」テーブルと「T部品項目」とを、「部品項目ID」フィールドで結合させた
クエリとします(工程1−3)。
第二の方法ですが、
まず、T部品項目を作ります(工程2−1)。
そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
Aフォームのレコードソースにおいて
「工程識別区分」フィールドが「あ」であるレコード数を
取得します(DCount関数)。
このレコード数に1加えたものがT部品項目の「部品項目ID」フィールドの値となる、
そういうレコードの「部品項目」フィールドの値を得ます(DLookup関数)。
この「部品項目」フィールドの値をAフォームの「部品項目」テキストボックスに代入します。
この処理もVBA必須です(工程2−2)。
第三の方法ですが、
Aフォームにおいて前レコードの「部品項目」テキストボックスの値を取得し、
計算により次の部品項目を取得するという方法も考えられます。
でも、この計算はやっかいです。
部品項目の一桁目と二桁目を別々に取得したり、
9の次がAになるようにしたり、
Aの次がBになるようにしたり、
Zの次が0になるようにしつつ、下から2桁目を一つ繰り上げたり
する処理を、If文を駆使して考える必要があります。
なお、Aの次がBになるようにするためには、文字コードを使うことになると思います。
計算が厄介すぎるため、アクセスでは第三の方法を採ることはよほどのことがない限りないと思いますし、私もこれ以上考えたくありません。
第一の方法が最もアクセス的だと思います。
|
|