• ベストアンサー

AccessのDMax関数使用後のテキストの表示

Accessで項目の表示がうまくいきません。 もともとテキスト型の項目で、例えば「0005」というデータがあります。 それがフォーム(1)ではそのまま「0005」と表示されます。 それにマクロでDMax関数を使用して1足し込み、値の代入をし、フォーム(2)で表示すると、 「6」と表示されます。 「0006」と表示させたいのですが、どうすればいいでしょうか。 また、「6」ではなく「0006」でレコードの更新もしたいのですが、可能でしょうか。 (要は、その都度最新の番号を取得して、その番号でレコードの更新もしようとしているのですが。) おわかりの方、回答よろしくお願いします。

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

  • ベストアンサー
  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.1

こんにちは。マクロってVBAではないですか? そのコードの中で「0005」を数値に変換している部分があるんだと思います。それを数値にしないように書き換えるか、最後にFormat(数値,"0000")で体裁を整えるかだと思います。 >また、「6」ではなく「0006」でレコードの更新もしたいのですが、可能でしょうか もちろん可能ですが、ちょっと心配になってきました。何かの新規入力画面で、最初に連番を取っておいてそれで入力した内容を登録しようというものに感じました。1ユーザーの使用なら問題ありませんが、複数のユーザーで使用すると、確実に番号が飛び飛びになりますよ。そうすると、思ったよりかなり多くの桁数を想定しておかないとすぐに桁数が足りなくなります。通常、登録時に連番を振る方法を取ると思いますので、そういう場合だと表示されることはないと思います。 全部想定されていることかもしれませんし、全然見当はずれで余計なおせっかいな事かもしれませんね。失礼しました。

noname#50871
質問者

お礼

VBAではないのです。マクロなんです。 マクロ名やアクションを入力とか選択する画面でやってます。 その画面で「値の代入」を選択して、式を入力してます。 ここで最初はDMax関数のみ使用していたのですが、 アドバイスどおりFormat関数でくくってみたら「0006」と表示されました。 本当はVBAなどもう少し深いところまで勉強すればいいと思うのですが、 アクセス初心者なのに期限も決まっているため、付け焼刃状態なのです。 (すみません、どうでもいいことですね。) ともかく、うまくいきましたので ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#140971
noname#140971
回答No.2

攻め方の方向性のみに限定しての回答ですが・・・。 <tabA> ID_____fld1___fld2 0001_____1__A 0002_____2__B [イミディエイト] ? NextID("tabA", "ID") 0003 ? NextID("Groups", "ID") 5 もちろん、列[ID]はテキスト型で長さ=4。 よって、列[ID]の最大値は'9999'です。(いいのかなー) ところで、主キーの次の値を取得するケースは一箇所じゃないでしょう。 ならば、NewID()とかNextID()なる関数を用意するのが常套手段ではないですか? NextID()は、イミディエイトウィンドウでのテストでも判るように主キー列が文字列か否かを判定しています。 このように、主キーが文字列なら文字列で取得する、数字なら数字で取得すれば解決すると思います。 ADOなんかでコードを記述すると、こういう関数も可能です。 もちろん、文字列を主キーとした場合、整形する長さを判定するために<既定値>を設定して置かねばなりません。 僅か、最初の1レコードだけのためですが・・・。 が、いずれにしろ、<既定値>='0000' ならば '0001' を戻すNextID()は可能です。 さて、肝心の<主キーが文字列なら文字列で取得する>の部分も・・・。 If Not .BOF Then   If .Fields(0).Type = 202 Then     N = Format(Val(.Fields(0)) + 1, String(Len(.Fields(0)), "0"))   Else     N = .Fields(0) + 1   End If End If [イミディエイト] ? FORMAT(VAL("00000000001")+1, "00000000000") 00000000002 VALで加算してから、FORAMT関数で整形しているということです。 同じことをやられたら良いと思います。

noname#50871
質問者

お礼

ご丁寧に説明いただいてありがとうございます。 最初に言っておくべきでしたが、 勉強不足のためまだVBAがよく理解できておりません。 もう少し勉強してから、再度参考にされていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A