- 締切済み
アクセスのフォームで自動連番を既定値で入力したいのです
アクセスのフォームでデータを入力する際に、 タブストップさせずに自動採番で入力Noを入力 したいのです。元のテーブルのデータ型をカウント 型にする方法はあるのですが、そうすると入力途中で 取消し(コマンドボタン)するとカウントだけは進んで しまいます。基本的に1,2,3,4と順に番号をふってくれれば いいのですが、取消した時には入力Noも戻って欲しいのです。 これが上手くゆきません。どうしたらいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
VBAが分からないレベルですとはっきり言って難しいです。 私が行なう場合は「レコード表示」と「新規・編集」の2つのフォームを作成し、[新規・編集フォーム]は非連結にします。 1.[レコード表示フォーム]より[新規追加]ボタンを押すと編集フォームが開く。 2.上記1でフォームを開く際、フォームのOpenArgsプロパティに、新規の場合は0を、既存レコードの編集の場合は1を入れておき、フォームの各コントロールに対象レコードの値を入れる。 3.ユーザーが一通りの編集を追えて[更新]ボタンを押す。 4.新規レコードの場合は以下の処理をすべて行なう。既存レコード編集の場合は以下の処理のうち8・9・10・12を行なう。 5.番号管理テーブルには最終番号を記録したレコードが1つだけあり、そのレコードをレコードセット型の変数で開く。 6.数値型の変数[lngLastNum]に番号を取得。 7.lngLastNumに+1した数値を編集フォームの[番号]テキストボックスに入れる。 8.コネクションオブジェクトのトランザクションを開始。 9.編集フォーム上の各コントロールの値をそれぞれ変数に代入。 10.その変数を使い、SQLのINSERTで新規レコードをテーブルに追加する。またはSQLのUPDATEで既存レコードを更新する。 11.番号管理テーブルのレコードを+1して更新する。 12.トランザクションをコミットする。 ※ 途中でエラーが起きた場合はエラーのラベルにジャンプし、トランザクションをロールバックする。 ざっと書くとこんな感じです。(間違ってるかも・・・(^_^;; 私はレコードを単体表示するは非連結のフォームを使うのが好きなのでこんな感じになってしまいます。(なにしろWebアプリを作るのが多いので) 上記手順が理解できないと難しいと思います。
最終番号を管理するテーブルを作ればどうでしょうか。 Form_BeforeInsertイベントやVBAコードから新規レコードを作製したときに番号管理テーブルから値を取得し、+1した値をテキストボックスに設定する。 新規レコードが更新されるタイミングや、VBAコードから新規レコードを保存するときに番号管理テーブルの値を更新する。 こんな感じではどうでしょうか?
お礼
早速のご回答有難うございます。 大変恐縮なのですが、なんとなく 意味はわかるのですが、初心者なもんで 具体的にどうすればよいかよく分かりません。 教えていただけますでしょうかm(__)m Form_BeforeInsertイベント・・・???? これは入力Noのテキストボックスのプロパティに 設定するのでしょうか VBAコード・・・??? VBAコードから新規レコードを作製したときに・・・??? 新規レコードが更新されるタイミング・・・これはフォームで データを入力し終わったときに、確認ボタンをクリックするので、 ここにマクロを組んでおけばよいわけですよね(^^ゞ
お礼
回答いただき本当にほんとうにありがとうございます。 残念ながら殆ど理解不能ですが、しばらく格闘してみようと 思います。。。。