• ベストアンサー

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

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

  • wakudo
  • お礼率75% (154/205)

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

  • ベストアンサー
  • 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

  • アクセス フィールド 500個

    アクセスでは、1テーブルでフィールド個数が255までと、制限があるようですが、1レコードに500個のフィールドが必要となりました。2個のテーブルを開いて、500個のフィールドに対して、レコードを単票形式で入力できる様にするには、どうしたらよろしいか?よろしくお願いいたします。

  • Accessで前に入力したフィールドのコピー/入力の簡略化で

    具体的には商品名の入力で 同じような名前で最後の方が少しだけ違う品名が 続きます。 オートナンバーでキーは自動でつけて行きます こんな時、前に入力した品名が、 新しく入力しようとするレコードの品名のところが ブランクでなく、前レコードで入力した値が コピーされていれば、違うところに(品名)の入力 だけですむのですが こうしたロジックを組み込むのはどうすればいいでしょう フォーム入力で考えています

  • access2007のオートナンバーについて

    access2007のオートナンバーについて こんにちは、さっそくですが質問させていただきます。 accessの勉強を始めた者ですが、 オートナンバーを指定したフィールドと、その他の必要な項目の フィールドから成るテーブルを作成して、 オートナンバー1~3までのレコードを入力して、 オートナンバー3のレコードを削除した時、 そのあとで、レコードを追加すると、 オートナンバー4のレコードが作成されるのですが、 このレコードをオートナンバー3のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。

  • Accessで、DoCmd.FindRecordがオートナンバーを間違える

    Access2003 XPです。 タイトルを短くと思ったら変な文章になってしまいました。 内容は、サブフォームにデータシートで表示させているデータがありまして、ダブルクリックされた行のデータを別フォームに単票フォームで表示させています。 データベースにはオートナンバーを設けてあり、ダブルクリックされた行のオートナンバーを取得して、 単票フォーム表示のフォームのオートナンバーのフィールドを指定して、 DoCmd.FindRecordで開くようにしています。  ↓ソース '単票フォーム画面(Mainフォーム)を開く DoCmd.SelectObject acForm, "Main" '表示するレコードを指定 DoCmd.GoToControl "txtNo" ←オートナンバーが連結されている DoCmd.FindRecord intNo, acAnywhere ←IntNoが取得した番号 オートナンバーの取得はうまく出来ています。 が、単票フォームを開くと違うデータが開くので 何番を開いているのか調べてみたら 3を指定 → 213を表示 7を指定 → 217を表示 81を指定 → 281を表示 100を指定→ 100を表示 ちなみにデータは294件あります。3桁なら良いのですが 桁数が少ないと、1の桁、10の桁だけ変更されるようで…。 DoCmd.FindRecord intNo, acAnywhere の前にIntNoに0を渡してから取得したオートナンバーを渡してもだめでした。 で、テーブルにてオートナンバーの列を一旦削除して再度設けてふりなおしたら1桁だけのデータも全てちゃんと表示されるようになりました。 データ更新をしていると何らかのきっかけで又だめになるようです。 きっかけは分かりません;; この現象は何なのか、解決法が分かる方いらっしゃいましたらお願いします。

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • アクセスでフォームに入力したレコードの複製について教えてください

    アクセスでフォームに入力したレコードの複製したいのですが、何か方法はありますか? テーブルをコピペしようとしたらオートナンバーを含んだフィールドを入れているせいか、ペストができません。

  • ACCESS2000でオートナンバーを1から付けたいのですが

    ACCESS2000のテーブルで新規に作ったときはオートナンバーフィールドが1からになるんですが、何度かレコードの試験入力や削除を繰り返しているうちに、頭の番号が増えていきます。テーブルのデザインで、オートナンバーをテキスト型にして、新しいオートナンバー型行を挿入しても1からになりません。なにかよい方法はないでしょうか?

  • アクセス2000 入力の結果によって入力の可不可を設定したいです

    初心者で質問も上手に書けなくてもどかしいのですが、よろしくお願い致します。 以前、選択した値ごとに違う処理をしたいという質問をしたのですが、 (オプショングループを作って、3番を選択した時だけ次のフィールドに入力できるようにしたい、という内容) その時に「Enabled」という言葉を教えていただき、とても有難く感動いたしました。 しかし、単票フォームの時は上手くいくのですが、帳票フォームだと、 一つのレコードで3番を選択すると、他のレコード全部もenabled=True状態になってしまいます。 一つ一つのレコードごとに設定できる方法はありますでしょうか? 本当に分りずらい質問の仕方ですいません。 以前した質問です。 http://www.okweb.ne.jp/kotaeru.php3?q=315095 <オプショングループで選択肢を3つ作りました。選んだ値ごとに違う処理をしたいのですが。。。。 例えば、「不要品フィールド」で、(1)持ってる (2)捨てる (3)あげる の3つがあったとして、 (3)を選んだ時だけ、「あげる人フィールド」に「○○さん」と入力できるようにしたいのです。 (1)や(2)を選んだ時には「あげる人フィールド」に入力できなくしたいです。 >

  • Access 連結フィールド値を自動で表示

    Accessでフォーム上にサブフォーム(データシート)を作成すると、 新規レコード欄にも自動的に連結フィールドの値が表示されます。 このサブフォームをメインフォーム上に作らずに、 コマンドボタンクリック時にあるフィールドが一致する(上記で言う連結フィールド)データを表示したサブフォーム(データシート)を開くかたちにしたいのですが、そうすると当然ながら新規レコード欄には連結フィールドの値は表示されません。 これをメインフォーム上にサブフォームを作った時と同じように、新規レコード欄に連結フィールド値を表示させるにはどうしたら良いでしょうか? サブフォームを開く段階で新規レコードに結合フィールドの値を(VBAで)入力する事も考えましたが、そうするともしそこにデータを入れるつもりじゃなくても1つのレコードとしてデータが残ってしまいます。 メインフォーム上に作ったサブフォームなら、新規レコードに結合フィールドの値は表示されているものの、その他のフィールドにデータを入力しなければ1つのレコードとしてデータが残ることはありません。 こういう事が可能かどうかわかりませんが、ご存知でしたら教えてくださいませ。 よろしくお願いします!

  • accessの数値型のフィールドサイズの規定値

    access2003 迄はオートナンバー型も数値型もフィールドサイズは倍精度浮動小数点型が規定値と記憶しております。 access2010ではオートナンバー型は長整数型、数値型は整数型となっています。 周りの環境はAccess2000~Access2010まで混在しています。 規定値を一つにしたいのですが(できれば倍精度浮動小数点型)

専門家に質問してみよう