プロが教えるわが家の防犯対策術!

アクセス2010で取引台帳テーブルに連結した入力フォームを作り、件名を入力すると契約NOを自動で採番するように
下記のコードにして使っていました。
しばらくはちゃんと採番されていたのですが、分類をする時に使う、
2個あった区分を3個に追加して、
コードも2個から3個に追加しました。それから変になった気がします。

契約NOの最大値+1だと前回作られたNOと重複するようになってしまい、
契約NO+2だと、最後の最大値の次のNOが作れます。
なぜ突然こうなったのかが分かりません。

VBのコードをきちんと学んだ事がなく、本でサンプルを見たりしながら作っています。
わかりやすく教えていただきたく、お願いいたします。

契約NOは R-KS1305-0055
Rが区分
KSがコード
1305が年月2013/05
0055が連番で採番しています。


Private Sub 物件名_AfterUpdate()
Me![契約NO] = Me![区分] & "-" & Me![コード] & Format(Me![入力日], "yymm") & "-" & Format(DCount("契約NO", "取引台帳") + 1, "0000")

A 回答 (2件)

DCount で件数を取得して、それから連番を生成してますね。


途中のレコードが1件削除されてませんか。
そうすると連番が重なるようになります。

DMaxで最大値を取得するようにすればいいと思いますが、区分や年月などの余分な情報が付いているためそれを除いた最大値を取得する必要がありますね。


Me![契約NO] = Me![区分] & "-" & Me![コード] & Format(Me![入力日], "yymm") & "-" & Format(Val(DMax("Right([契約NO],4)", "取引台帳")) + 1, "0000")

この回答への補足

早速、ありがとうございます。
上の通りに修正したら、また連番ができました!
ちなみに、不要なデータは削除してはいけないのですか?
削除コマンドボタンで、削除できる様にしているのですが。

補足日時:2013/05/16 12:16
    • good
    • 0
この回答へのお礼

わかりました。
また勉強していきます。とっても助かりました。

お礼日時:2013/05/16 14:02

> ちなみに、不要なデータは削除してはいけないのですか?



最初の件数(DCount)で連番をつけると、削除した分だけ取得する連番が小さくなりますからダメですが、
私の提案した最大値(DMax)を取得する方法なら、削除しても大丈夫です。

コードのロジックをきちんと理解して使用するようにしましょう。
    • good
    • 0

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