Accessのオートナンバー取得方法とは?

このQ&Aのポイント
  • Access97を使用して、営業の訪問日報を作成する際に、親フォームと子フォームを連携させる方法を教えてください。
  • 親フォームでフィールドを更新せずに子フォームを入力した場合、オートナンバーを取得する方法について詳しく教えてください。
  • Accessのオートナンバー取得について、質問がわかりづらくて申し訳ありません。お手数をおかけしますが、よろしくお願いします。
回答を見る
  • ベストアンサー

Accessのオートナンバー取得

皆さんよろしくお願いします。 Access97を使用して、例)営業の訪問日報を作成しようと思います。 親フォームには、連番(オートナンバー型)と活動日(規定値にDate()を設定)の 二個のフィールド。 子フォームは、親の連番とリンクした番号・訪問先名・訪問時間・ 活動内容とします。 フォームを開くときイベントで DoCmd.GoToRecord , , acNewRecを設定。 親フォームは、連番と活動日が自動で入るので更新する必要がないので 子フォームにフォーカスを移すが、親でイベントが発生しないため 連番が更新されません。 質問)親フォームでフィールドを更新せず、子フォームを入力してとき オートナンバーを取得する方法を教えてください。 上手に質問がかけませんでしたが、よろしくお願いします。

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

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

『活動日』への既定値を廃止し、代わりに「値の代入」(と「レコードの保存」)とするのが よいのではないでしょうか。 「値の代入」を行うイベントとしては、「レコードの移動時」か、子フォームの「フォーカス 取得時」辺りが無難かと思います。 但し、一長一短がありますので、当該日報の使い勝手としてどちらがよいか見極める 必要があります。 ※ユーザーが行う作業を追加してもよいなら、コマンドボタンのクリックで行うのが   ベストかと思います。 <レコード移動時で対応した場合の難点>  新規レコードへの移動と同時にレコードが保存されてしまうので、  そのレコードが不要だった場合、削除してやる必要がある。  (なお、オートナンバーの都合上、削除をするとその分は欠番に   なります:   削除後、次の追加前に、メニューで「ツール(T)→データベース   ユーティリティ(D)→最適化(C)」を選ぶなどして最適化すれば、   次回追加時の欠番は回避可能) <サブフォームのフォーカス取得時で対応した場合の難点>  サブフォームにフォーカスがある状態で、親フォームのレコード  セレクタや移動ボタン(→フォーム最下にあるレコード番号を表示  する場所とその両脇に並んだボタン)で移動すると、コントロール  の移動がないため、「フォーカス取得時」イベントが発生しない。 以下、レコード移動時の場合です(本体部分の4行は、どのイベント に割り当てた場合でも同じですが): Private Sub Form_Current()   '新規レコード時のみ、今日の日付を入力してレコードを保存   If Me.NewRecord Then     日付 = Date()     RunCommand acCmdSaveRecord   End If End Sub

doredore1
質問者

お礼

適切なご回答ありがとうございます。 「値の代入」は、一長一短あるようですがとても参考になりました。 色々試して見ます。 >※ユーザーが行う作業を追加してもよいなら、コマンドボタンのクリックで行うのが   ベストかと思います。 やっぱりこの方法が一番スッキリしますかね。 とてもいいヒントをいただきましたことお礼申し上げます。

関連するQ&A

  • 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桁だけのデータも全てちゃんと表示されるようになりました。 データ更新をしていると何らかのきっかけで又だめになるようです。 きっかけは分かりません;; この現象は何なのか、解決法が分かる方いらっしゃいましたらお願いします。

  • サブフォームの新規レコードに移動したい アクセス

    親フォームのコマンドボタンをクリックしたら 親フォームにはまっているサブフォームの新規レコードに移動したいのですが、 うまくできません。 サブフォームのオブジェクト名は、"F_SubForm"です。 サブフォームはデータシートビューです。 VBAコードは Private Sub cmd_test_Click() DoCmd.SelectObject acForm, "F_SubForm" DoCmd.GoToRecord , , acNewRec End Sub です。 上記コードを実行すると DoCmd.SelectObject acForm, "F_SubForm" の部分で、 「実行時エラー 2489  オブジェクトが開いていません。」 となります。 だからと言って、 DoCmd.GoToRecord , , acNewRec だと、何も起こりません。(新規レコードに移動しません) 解決方法をご教授ください。

  • Accessのオートナンバーに近い事をやりたい

    Accessのフィールドの型の中にオートナンバー型という、自動で連番になる型があります。 SQL Serverにはそういった型がないため、自分でナンバーを付与していくスクリプトを組まなくてはいけないと思います。 一番簡単な方法は、連番になっているフィールドを降順で並び替え、一番最初のレコードに1を足してあげれば連番になるのですが、Webで注文を受けるようなシステムの場合、タイミングによっては同じ番号を割り当てられてしまう可能性があります。 同じ番号がわりあてられずに連番で番号を付与していくには、どういうやり方があるのでしょうか?

  • アクセスでオートナンバーをリセットするには?

    Accessで連番をふるプロセスで質問です。 データをあるテーブルに追加した時に、連番をふりたいと考えています。 最も簡単なのはオートナンバーフィールドを設定する方法なのですが、この場合一つ欠点があります。 それはレコードを全削除した場合でもナンバーがリセットされないという事です。 追加クエリでテーブルにデータを追加する前に必ずテーブルのレコードを全削除するのですが、 この際にオートナンバーも一緒にリセットする方法は無いでしょうか? また、質問の題名とは変わってしまうかもしれませんが、 オートナンバーを使用せずにレコードに連番をふる方法があればご教授下さい。

  • Access を×ボタンで閉じる時、レコード保存したくない。

    Accessで最後の1レコード分のデータ入力を行ってから、レコードの更新をせず、レコードを移動せず、更新ボタンも押さず、いきなりフォームを閉じると、この1レコードが保存されてしまいます。 Me.Undo DoCmd.GoToRecord , , acNewRec を読込み解除時のイベントに入れても、しっかり保存されてしまいます。 閉じる時のイベントに入れるとエラーが出て保存されます。 ×ボタンで閉じる時、入力途中のレコードを保存せずに閉じるにはどうしたら良いでしょう。 初心者ですので、何か簡単で良い方法がありましたら、ご教授願います。

  • アクセス2007でオートナンバーを任意の番号から始めるには

    テーブルを開いて、作成のリボン中の「クエリデザイン」→オートナンバーを任意の番号から始めたいテーブルを選んで「追加」→オートナンバー型の当該フィールド(以下、受付番号という。)を選択→デザインのリボン中の「更新」→「レコードの更新」で「100+[受付番号]」と入力→実行 すると 「フィールド「受付番号」は更新できません。フィールドが更新可能ではありません。」とのエラーメッセージが出るのですが、どうしたらオートナンバー型のフィールドである受付番号を101から始められるのでしょうか?

  • アクセス オートナンバー について

    アクセス超初心者です。 年月で更新される伝票番号をオートナンバーで作成したいのですが、可能でしょうか? 例: 2010年9月4日(2010年9月の1番目の伝票) → 100901 2010年9月18日(2010年9月の2番目の伝票)→ 100902 2010年10月5日 (2010年10月の1番目の伝票)→ 101001 フィールドには日付としてyy/mm/ddで日付型で入力しています。 そこからyymmだけを認識させて、末尾の番号を連番で自動更新させることは可能でしょうか? よろしくお願いします。

  • アクセス enterで次ページ(レコード)移動

    アクセスでformを使い最後の入力”失効有無”が終わったら次のレコードにenter keyで 移動したいのですがうまくいきません。 プロパティの更新後処理 イベントプロシージャのところに下記を書いています。 Private Sub 失効有無_AfterUpdate() DoCmd.GoToRecord , , acNewRec DoCmd.GoToControl "ID" End Sub 以前はこれでうまくいったと思います。。。 おかしいですか? よろしくお願いします、

  • Accessレコードの削除(VBA)

    Accessで入力フォームを使用して入力をしていますが、 全項目の入力がされていない場合そのレコードを削除したいのです。 閉じるときに消そうと思い DoCmd.RunCommand acCmdDeleteRecord を入れてみたのですが、レコードの削除はできません、とメッセージが出てしまい消せません。 次のレコードを選択すれば消せるかと思い DoCmd.GoToRecord , , acNewRec を足してみたりしてみたのですが、やっぱりダメでした。 この場合はどのようにすればいいのでしょうか?

  • ACCESSでのひとつ前レコードの求め方について

    ACCESS2000にてDLOOKUP関数とDMAX関数を用いて一つ前のレコード内容フィールドを クエリにて作成しようとしております。下記の式を設定しクエリを実行すると一つ前の レコード情報(前レコードの ”終了時間”内容)は出力されるのですが、暫くすると "クエリ式 '連番' の構文エラー:演算子がありません" と表示されます。 上記エラーの対処方法を教えて頂けたら思います。 尚、該当の数式ですが 前終了時間: DLookUp("終了時間","訪問業務テーブル(更新後)","連番=" & DMax("連番","訪問業務テーブル(更新後)","連番<" & [連番])) となっております。 ”連番”は オートナンバー形式のもので 1から順番に振られており、この連番を元にひとつ前レコードを参照する様にしております。 上記式に使用されている フィールドのデータ型ですが (1)連番: オートナンバー型 (2)終了時間: テキスト型 となっております。 お手数ですがよろしくお願いします。