• ベストアンサー

アクセス2003でIDフィールドのデータをオート入力(規定値)したいのですが

こんにちは。 教えてください。 オートナンバー型を利用せずに単票フォームからNOフィールドのデータを入力したいのです。  ↓こんな考え方で レコード新規作成時 : NO 規定値 総レコード件数+1 です。 オートナンバー型を利用するとたとえばNO10を後での削除をすると その10は欠番になり利用不可ですよね。 そこらへんは柔軟に必要があればいつでも欠番になっている10という値をNOフィールドに手入力で再利用したいのです。 いろいろ調べてみたのですがいい感じな方法が見つけられませんでした。 お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> レコード新規作成時 : NO 規定値 総レコード件数+1 > 必要があればいつでも欠番になっている10という値をNOフィールドに手入力で再利用したい 連番の途中に生じた欠番は、使っても問題がないかを管理者が確かめて手入力する一方、 通常の連続入力時は、自動で「最大値+1」を入力したい、ということでよろしいでしょうか。 そうであれば、ご質問の『No』フィールドの既定値に、以下のような式を設定すれば、ご要望に 沿うかと思います: =Nz(DMax("[No]","テーブル1"),0)+1 ※上記の式は、テーブル名が「テーブル1」とした場合のものですので、必要に応じて編集してください。 なお、Nz関数は、1個目の引数に指定したものがNullだった場合に、2個目の引数で指定した値に 読み替える関数です。 (詳しくはAccessの「オフライン時のヘルプ」で、「Nz関数」をキーワードに検索して、そちらを参照して  下さい:「Microsoft Office Online」のヘルプだと、たどり着くのに手間がかかります) ですので、既に入力済みのデータがある状態での「フォームの改変」の場合は、 =DMax("[No]","テーブル1")+1 でも事足ります。 また、「既定値は最初から値が表示されていて気持ち悪い」という場合は、フォームの挿入前イベントで 値を代入してやる手もあります。 VBA: Private Sub Form_BeforeInsert(Cancel As Integer)   Me!No = Nz(DMax("No","テーブル1"), 0) + 1 End Sub マクロ:  フォーム・挿入前イベント=マクロ1  マクロ1の内容   アクション : 値の代入   アイテム : Forms!フォーム1!No   式 : Nz(DMax("[No]","テーブル1"),0)+1   ※ここの「式」では、先頭の等号は無用です。 ・・・以上です。

wakudo
質問者

お礼

ありがとうございます。 私が伝えたかった思いがうまく書けなくて×××のまま誤って[送信]ボタンを押しておりました。にもかかわらず的確に私の思いをくみ取っていただき感謝です。 これから出社でまだ教えていただいた操作は確認はしておりませんが 恐らくうまくいきそうなきがします。 あまりにも嬉しくて先にお礼を述べております。 *「既定値は最初から値が表示されていて気持ち悪い」という場合は* そうなんです! わかっていただけてうれしいです。 本当にありがとうございます。 ゆるゆるなDBを作りたいのですがなおかつ、自分の実力がないにもかかわらずわがままな欲求ばかりむくむくとおこってしまい困っております。自分で自分の首を絞めております((+_+)) でも嬉しいです。本当に思いをくみ取っていただきありがとうございました。

その他の回答 (1)

noname#79209
noname#79209
回答No.1

直接の回答ではありませんが、 > いろいろ調べてみたのですがいい感じな方法が見つけられませんでした。 これは、ある意味当たり前のことで データベースではID等の「レコードを一意に認識するため」の番号を使い回すのは、「非常に危険な」ことです。 データベースがグチャグチャになるおそれがあります。 従ってこのようなことをすることがないため、情報が少ないのだと思われます。 たとえば、商品マスタなどで「A商品」のIDである「商品番号」を削除して、別の「B商品」の「商品番号」として使い回すと、 既に入力されている「A商品」の売上データも「B商品」の売上として紐付けされてしまいます。 あえてやるなら、欠番のテーブルを作るなどの方法はありますが、 テーブルを総なめにするようなコードになるので、レコードが多くなってくると時間がかかり、実用的とは言えません。 また、もともとAccessにはレコード番号という概念がありません。 行番号を表示したいだけなら、フォームやレポートで一時的に作り出します。 老婆心ながら....

wakudo
質問者

お礼

アドバイスありがとうございました。 私もIDフィールドのコンセプト?考え方は知っているつもりです。 だから・・・なかなか融通をつけづらいというのも道理がいきます。 ただ今回管理したいDBはエクセルでもいいような代物です。 にもかかわらずACCESSを利用するのは入力する人間が 不特定多数そして何件顧客がいるのかという状況を知りたいという方も不特定多数おります。 各々欲しい情報や入力する情報が異なる可能性がありましてEXCELでは誰が入力してもとか誰でも欲しい情報を簡単に(なるべくワンクリックで)という事が私ではちっと難しいかな?じゃぁ制限をかけやすいACCESSで・・ということなのです。 きっちりしない方法という方向で考えておりました。 がしかし再確認させていただき感謝です。 ありがとうございました。

関連するQ&A