プロが教える店舗&オフィスのセキュリティ対策術

【テーブル名】T_株券管理
【フォーム名】F_株主入力
【フィールド名】株主ID(テキスト型)(主キー)
フォームに入力する際にオートナンバーを使用せずに、
レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。

本当はオートナンバーでIDを振っても良いのですが、レコードの削除等行った時に歯抜けになってしまうので、うる覚えで申し訳ないのですが・・・確か、フォームのテキストボックスのプロパティ、コードビルダでVBを「レコードが移動した際に」→「株主IDが0の場合に”00001”を、0でない場合には既存の数値に+1した数値をテーブルT_株券管理の”株主ID”に入力する。」といった感じの記述がしてあったと思います。VB初心者なので、説明が上手くできずにすみません。
このような記述方法はありますでしょうか?

A 回答 (2件)

オートナンバーの再現は、



[id]のプロパティの既定値に、

=DMax("ID","請求書")+1

と書けば済みます。

所謂、採番テーブルを用いない一番簡単な方法です。

が、この場合、歯抜けは管理できません。
もちろん、採番テーブル方式も同じです。

<歯抜け管理は至難のワザ>

ところで、歯抜け管理は採番テーブル方式よりもややこしいですね。
仮に、連鎖削除をしていないゴミレコードがあった場合の対応です。
歯抜けを復活すれば、当然にリンク先のゴミも復活します。

また、現実問題は、歯抜けを検索する GetNewID() を作成しないといけません。

=GetNewID("ID","請求書")

歯抜けがあれば、そこを埋める値を返し、そうでなければ最大値+1を返す関数です。
この関数の方が、NewID()よりもややこしいですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。IDを「00001」「00002」「00003」・・・・というようにしたかったのですが、=DMax("ID","請求書")+1でしばらく対応してみます。

お礼日時:2007/08/13 09:24

フォーム:F_株主入力の[株主ID(テキスト型)(主キー)]のプロパティの既定値に



= format(Cint(Nz(DMax("株主ID", "T_株券管理"),"0")) + 1,"00000")
※DMax関数は条件に該当するものがなかった場合、Null値を返します。

これでいかがでしょうか・・・(動作確認していませんが恐らく動く)

前の方おっしゃるように歯抜けは管理できません。
・あくまでも現IDの最大値にプラス1して発番すること
・初回のみ、「00001」が入るようにすること
に特化しています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
「歯抜け」という表現が間違っていました。

Private Sub Form_BeforeInsert(Cancel As Integer)
Me.株主ID = Format(CLng(Nz(DMax("株主ID", "T_株券管理"))) + 1, "00000")
End Sub

で解決致しました

お礼日時:2007/08/20 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A