![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
【テーブル名】T_株券管理
【フォーム名】F_株主入力
【フィールド名】株主ID(テキスト型)(主キー)
フォームに入力する際にオートナンバーを使用せずに、
レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。
本当はオートナンバーでIDを振っても良いのですが、レコードの削除等行った時に歯抜けになってしまうので、うる覚えで申し訳ないのですが・・・確か、フォームのテキストボックスのプロパティ、コードビルダでVBを「レコードが移動した際に」→「株主IDが0の場合に”00001”を、0でない場合には既存の数値に+1した数値をテーブルT_株券管理の”株主ID”に入力する。」といった感じの記述がしてあったと思います。VB初心者なので、説明が上手くできずにすみません。
このような記述方法はありますでしょうか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
フォーム:F_株主入力の[株主ID(テキスト型)(主キー)]のプロパティの既定値に
= format(Cint(Nz(DMax("株主ID", "T_株券管理"),"0")) + 1,"00000")
※DMax関数は条件に該当するものがなかった場合、Null値を返します。
これでいかがでしょうか・・・(動作確認していませんが恐らく動く)
前の方おっしゃるように歯抜けは管理できません。
・あくまでも現IDの最大値にプラス1して発番すること
・初回のみ、「00001」が入るようにすること
に特化しています。
ありがとうございます。
「歯抜け」という表現が間違っていました。
Private Sub Form_BeforeInsert(Cancel As Integer)
Me.株主ID = Format(CLng(Nz(DMax("株主ID", "T_株券管理"))) + 1, "00000")
End Sub
で解決致しました
No.1
- 回答日時:
オートナンバーの再現は、
[id]のプロパティの既定値に、
=DMax("ID","請求書")+1
と書けば済みます。
所謂、採番テーブルを用いない一番簡単な方法です。
が、この場合、歯抜けは管理できません。
もちろん、採番テーブル方式も同じです。
<歯抜け管理は至難のワザ>
ところで、歯抜け管理は採番テーブル方式よりもややこしいですね。
仮に、連鎖削除をしていないゴミレコードがあった場合の対応です。
歯抜けを復活すれば、当然にリンク先のゴミも復活します。
また、現実問題は、歯抜けを検索する GetNewID() を作成しないといけません。
=GetNewID("ID","請求書")
歯抜けがあれば、そこを埋める値を返し、そうでなければ最大値+1を返す関数です。
この関数の方が、NewID()よりもややこしいですよ。
ありがとうございます。IDを「00001」「00002」「00003」・・・・というようにしたかったのですが、=DMax("ID","請求書")+1でしばらく対応してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
-
4
ACCESSのテーブルで、昇順並び替え後、連番フィールドを作成したい
Access(アクセス)
-
5
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
6
ACCESS 重複データを1つだけ表示したい(初心者です)
Access(アクセス)
-
7
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
8
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
9
(ACCESS)条件に応じて、テキストボックスを表示・非表示設定
その他(データベース)
-
10
Accessで数値型にNULLをInsertするとエラー
その他(データベース)
-
11
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
12
Accessで条件が2つのグループに連番をふる
Access(アクセス)
-
13
クエリで複数項目を昇順後、連番を付ける方法
Access(アクセス)
-
14
accessでの文字列の混ざった連番処理について
Access(アクセス)
-
15
accessのレポートを20行固定にする方法
Access(アクセス)
-
16
ACCESS クエリで1から順番に番号を表示したい
Access(アクセス)
-
17
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
18
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
19
新規レコード行を非表示にしたい
Access(アクセス)
-
20
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
access2000でつまづいてます
-
ACCESSのFindコマンドが遅い
-
Accessの更新前処理について。D...
-
Access VBAで自動連番を振るには
-
cobolのカーソルについて
-
VB2010のSQLを使ったレコードカ...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
Access テキスト型に対する指定...
-
「直需」の意味を教えてください
-
エクセルグラフの凡例スペース
-
ACCESSに同時アクセス(編集)を...
-
Accessでテーブル名やクエリ名...
-
ACCESSのクエリで集計で、先頭...
-
MS ACCESS 商品価格変更時の該...
-
ACCESSで和暦を西暦に・・・
-
ORACLEでLONG項目からCHAR項目...
-
作番ってどういう意味でしょうか?
-
Oracle 2つのDate型の値の差を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access count数を変数に格納
-
access2000でつまづいてます
-
Accessの更新前処理について。D...
-
ADOでループすると1レコードず...
-
「更新に必要なキー列の情報が...
-
ACCESSのFindコマンドが遅い
-
Access2003でのテーブルの有無確認
-
[Access]削除時のエラーメッセ...
-
Access VBAで自動連番を振るには
-
VBAのデバックをどなたかお手伝...
-
ECサイトの購入後の在庫処理
-
AceessVBA 非同期処理について
-
cobolのカーソルについて
-
ACCESS 処理件数の取得
-
adoのWHERE句 クエリだとフィ...
-
VB2010のSQLを使ったレコードカ...
-
VBScript+SQLServerでcountがう...
-
半角スペースの置換でエラーを...
-
Set rst = db.OpenRecordset("S...
-
Access VBA
おすすめ情報