<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--自動採番の巻
   1 2 3 4 5



ここまで、いかがでしょう。まあ、これだけなら問題なさそうなんですけど、他にもいろいろ把握しておいた方がよさげなことがありますから、その辺もお話していきますね。
たとえば・・・。1,2,3じゃなくて、0001、0002、0003って感じで、ゼロを入れて桁数を揃えて表示させたいってときはどうしたらいいでしょう?

基本的に「数値型」のフィールドでは、これはデキマセン。
「数値型」のフィールドで、0001、0002、ってやりたい場合は、「書式」を使って、表示上そういう風に見せるだけになります。

テーブルの「フィールドプロパティ」の中に、「書式」っていうのがあります。適当に半角のゼロを入れてみてください。

で、テーブルを保存し、データシートビューに切り替えてみると・・・。

ゼロも表示されますよね。
これは、00000001、って入力されてるわけじゃなくて、データ的にはあくまでも「1」という数値が入力されてます。テーブルを開いたときの表示書式で整えている、というわけです。

確認ができたらテーブル閉じましょうか。


なので、フォームを開くと、あれ、00000001ってなってないぞ・・・。

つまり、「表示書式」なので、テキストボックスの「書式」でもおなじことをやらないとならないわけですねー。
「書式」ですからね。実際のデータを、ここではこういう感じで見せます、っていう、設定ですからね。

ね。

さて、それでは・・・新しいレコードを追加してみましょうか。フォーム下部分のウニマークのボタンをクリックして、新規入力状態にしましょう。
でもって、何か1件「名前」を入力してEnterキーを押しましょうか。なんか、「番号」は相変わらずゼロですねぇ・・・。

でも、テーブルの方にはちゃんと7番目のデータということでちゃんと値が入ってると思います。


でも・・・なんとか、「A00000001」っていう具合に、先頭にアルファベットをつけたい、と思っても・・・これはできませんよね。

まさか「なんで?」とか、思ってないですよね???
だって[番号]は「数値型」ですよ。数字以外入力できないですよ。

まあ、表示書式でなんとかするって手もありますけどね。書式に「A00000000」って入れとけば(入力後、\がつくことがありますがそのままでオッケイ)、

見た目はA00000001ってなりますけどね。でも、テーブルの中の、データとしては、あくまでも1なんです。これは書式ですからね。


データそのものを、A00000001、という具合に入力していきたい、という場合は、こりゃもうフィールドのデータ型を変えるしかないです。

途中でデータ型を変更するのって、あんまりいいことではありませんけれど(なんで?とか言わないで下さいよ)・・・でも、いたし方ありません。これも修行のうちです。挑戦してみましょう。

データ型を変更してから、保存をして、データシートビューに切り替えてみましょう。

わたしはこんな感じになりました。左端に寄ってるところにご注目ください。
数値は右寄せ、テキスト型は左寄せになります。これはAccessに限らず、コンピュータの世界ではだいたいそうですよね。
つまり、「数字なのに文字扱い」のフィールドになるわけです。


でもって、もう一回、フォームAの方のイベントプロシージャを変更しましょう。
画面の下のほう見ていただいて、タスクバーにまだ「MicrosohtVisual….」というタスクが見えてる方は、まだVisualBasicEditorのウィンドウが開いたままだと思いますんで、切り替えればよいだけですね。ウィンドウをいったん閉じてる方は、

 フォームをデザインビューで開いて、
 [番号]テキストボックスのプロパティを見て
 「イベントプロパティ」の中の「挿入後処理」のところをクリックして
 右端に出てきたビルドボタンをクリックする

※訂正※
上記文章で、[番号]テキストボックスのプロパティではなく、フォームのプロパティの間違いでした。
ご指摘をいただきました皆様、ご迷惑をおかけした皆様、大変申し訳ありませんでした。

という段取りで、コードの書き換えをします。このへんで迷子になっちゃわないように気をつけてくださいね。

さてー。

どこを書き換えるかというと、ええと、まず、さっきまで書式プロパティでまかなっていた00000001っていう表記は、テキスト型のフィールドには効果ないですから、入力されるときに0が入るように、このコードの中で調節しましょう。

Format関数という関数をDmax関数の外側に使って、Dmax関数が出した答えに00000000という表示書式をつけるわけです。
めちゃくちゃに入力しているわけじゃないですよ。それぞれ、Format関数、DMax関数の書き方ルールにのっとってますからね。カッコとかダブルコーテーションをどうやって入力するのかよくわからない、という方は、それぞれの関数のヘルプを参照して、しっかり抑えておきましょう。

書き換えができたら、フォームを保存して、いったん閉じましょうか。


で、改めてフォームAを開き、フォーム下部分のウニボタンをクリックして、新規レコード入力状態にしましょう。

でもって例によって、[名前]だけを入力します。え?なんて入力したらいいのか思いつかない?
まーしょうがないですねぇ。じゃあゲンゴロウって入力してください。え?ゲンゴロウは嫌い??好き嫌いはいけませんよ。大きくなれませんよ。

なんか、相変わらず[番号]が空欄なんですけど・・・まあいいか。入力できたらEnterキーを押して、フォームを閉じましょう。

テーブルAを改めて開くと・・・。
ホラ。ゲンゴロウの[番号]は、00000008になってる!ね?うまくいったでしょう。

そりゃ、他のレコードの[番号]は書き換わらないですよ。だってそんな処理作ってないじゃないですかー。
わたしたちにとってみたら00000001と1は同じように思えても、コンピュータにとってみたら、ぜんぜん違う値なんですよ。それを知るための実験なんですからー。
で、今まで入力したアルマジロとかイボイノシシの[番号]を、00000001とか00000002に書き換えたい場合は・・・・。

あんまりにも件数が多い場合とかは、「更新クエリ」っていうのを作って、更新後のデータとして
  Format(番号,”00000000”)
ってやればよいのですけど、まだテスト段階で件数が少ないんで、今回は手入力で修正しましょう。

面倒かもしれませんけど、データベースの世界では、フィールドのデータ型がテキスト型か数値型かって、すごく重要なポイントになるんです。単にテーブルを作成するプロセスだけでなく、その後の、データベース全体に絡んでくることも考えられます。こうやって実際に小さいデータベースで実験してみると、テーブルを設計するときに気をつけておかなくちゃならないこと、いくつか見えてくるんじゃないでしょうか。

こういうのは、実際やってみないとわかんないですよね。
別に、1,2,3って勝手に番号がつけばいいし、レコードを削除したあと、番号が飛び飛びになっても別に差し支えなくて、っていうか、[番号]自体、便宜上つけているだけで、そのレコードが何番になっても[番号]なんてフィールドは表舞台には一切登場しない、なんて場合は、オートナンバー型のフィールド設ければよいのだと思います。
そうでなくて、商品番号とか、会員番号とか・・・いちいちあいている番号を探すのが面倒なので番号は勝手についてもらってほしいけど、後々「どの商品が何番か」ということははっきりしておかないとならない」という場合は(たいていそうだと思うんですけど)、なんかしらこうした仕組みを自分で作っていった方がよいかもしれないなぁ、と、わたしは思います。