• 締切済み

Accessでの質問

ID ----- 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A このようなテーブルがあり、フォームにいくつかのテキストボックスと登録というコマンドがあります。登録ボタンをクリックしたときtxtidというテキストボックスに何も入力されていないとき上のテーブルを参照してIDを採番し、登録できるようにするにはどうすればいいですか?ちなみIDコードの登録は16進数で登録できるようになっています。上の場合だと000Bを採番したいのです。仮に0007がないときは0007を採番したいんですが…初心者なので本当に困っています。お願いします。説明不足でわかりにくい時は質問していただければ大変助かります!

みんなの回答

  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

IDをオートナンバーにし、表示時に16進表記に変換すれば、新規レコード追加時に自動的に最大値を取れると思いますが、それでは回答にならないので。 >000Bを採番 IDが文字列とした場合 txtid = HEX(Val("&H" & DMAX(ID,テーブル名))+1) txtid = MID("0000" & txtid , len(txtid)+1 , 4) DMAX関数で、最大値を取得する。 VALで数値に変換しプラス1する。 HEXで16進数に MIDで頭に000を付加 >仮に0007がないときは0007を採番 抜け番を取得する為には、抜け番の無いテーブルを作成し、元のテーブルとの差分を作成し、そこから値を取得するか、最初から順番にカウントし抜け番を検索する必要があると思います。 それよりも、一覧を表示させ、入力者が判断して入力も出来るようにされてはどうでしょうか? 無い番号を探しにゆくより、ある番号を探しにゆく方が作成は楽ですから。

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.1

ちょっと考えましたが簡単な方法は無いと思います。 手法と言うよりはロジック的はお話ですが、やはり登録時に空き番号取得処理を作り、何処が空いているか一件一件探していくしかないように思います。空き番が存在しないのでしたらクエリーやSQLで最大値を求めそれの次の番号を振れば良いと思います(複数のクライアントから取得に行っている場合、登録がダブったときの再登録ロジックは必要です)。 例で言う0007が無ければそこに0007を入れるとなるとloopで一件一件頭から見ていって無かったらその番号を割り当てると言ったプロシージャを作る必要が有ると思います。