<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>食いだおれデータベース
  Page1Page2Page3Page4Page5Page6Page7Page8Page9Page10Page11Page12Page13



じゃあ・・・ゼロを含めて、必ず2桁に揃うようにしましょうかね。
いろんなやり方がありますが、format関数というやつが手ごろかなと思います。

とりあえず今入力途中のデータは、取りやめますか。[ESC]を押せば、入力途中のレコードを取り消すことができましたよね。
あ、でも、今日は練習ですから、別に中途半端に入力途中のレコードが残ってもかまわないですけど・・・。

で、さっきいろいろ入力したあのウィンドウを出します。
そうですね、とりあえず、もう一回、フォームのプロパティ「挿入後処理」欄をクリックし、ビルドボタンをクリックすれば、出てきます。

ピンク色で印を付けた部分を書き足してください。↑
と、大きく書くと以下のようになります。

Me![ナンバー] = Format(DMax("ナンバー" , "食いだおれテーブル") + 1 , "00")

赤い文字のところがDMax関数の構文、青いとこがformat関数の構文です。
ただややこしくカッコやダブルコーテーションが並んでるわけじゃありませんぞ。
よく見ると、ちゃんと各関数に必要な情報(引数といいますが)がカッコの中におさまるようになってますよね。

で、このFomat関数、実にいろいろ使えるんです。特にVBAを覚えていきたい、と思ってる方は、必修の関数かもしれないですね。

構文としては

=Format(書式設定の対象となる値など , 書式)

です。で、書式にあたる部分に"00"と入力することで、"01","02","03","04"....という表示になるわけです。
もし、"001","002"...と3桁にしたければ"000"、4桁なら"0000"、5桁なら"00000"、6桁なら"000000"、7桁なら"0000000"、どどーんと256桁なら・・・・・・おほん。
と、しておけば、[ナンバー]に代入される値の形式は自由自在です。

今日は2桁でいいかな・・・練習だし。3桁4桁にしてみたいという方は、挑戦してみてください。

なんでダブルコーテーションで囲んでいるところとそうでないところがあるのか・・・
というところも、ちゃんと法則があるんですけど、その辺はじっくりいろんなサンプルを見ながら、追々煮詰めていってくださいね。


VBAを勉強したい、という方は、format関数とかDMax関数とか、こういう所定の処理をする関数の利用方法を、たくさん習得していかれる必要があるでしょう。いろいろな関数がありますので、市販の関数ハンドブックなどを1冊手元においておかれるとよいと思います。


今度はどうでしょう。番号、希望どおりゼロ付きで出てきます?


さて、本題から離れて、主キーとデータ型について、少し考えてみましょう。

下のようなテーブルがあったとします。[番号]を主キーにしています。
お分かりと思いますが、左詰めでデータが表示されているということは、どちらのフィールドもテキスト型ということになります。
つまり、数字でも文字扱い、ということです。

なので、左のように[番号]を入力したとすると、




  いったんテーブルを閉じ、
  再び開いたとき、右のように並びます。→

数字ですけど数値ではないですからね。一番左の数字で並べ替えをするわけです。だから、5の次は514なんですね。
こういう並べ替えをするなら、[番号]は数値型フィールドでなければなりません。

数値型のフィールドなら、左のようになります。数値ですから、1の次は2だし、5の次は6ですね。
わずかな違いではありますが、この違いは少し意識しましょう。
細かいところでいろんな処理にかかわってくるはずです。

状況にもよりますが、この場合は数値型でもテキスト型でもどちらでもよいでしょう。
ただ、テキスト方の場合は、正しく並び変るように配慮しないとならないですね。

で、こんな風に先頭にゼロを入れて、桁数を揃えてみました。擬似的ですが、右詰の数値と
同じような感じで値が揃いますよね。
右と左のテーブルの違い、見比べてみてください。

数値型は右詰に見えるだけで、別に右端から数字が並んでるわけではないんですけど・・・
見た目は同じような感じになります。

これなら番号が飛んでも、データが増えても、思った通りの並び方になるんじゃないでしょうか。
並べ替えをする必要がなければ、[番号]のフィールドに同じ数字をダブって入力しなければ主キーとして成り立ちますので、右のような状態でも差し障りないと思いますけどね。
なんか気持ち悪いですよねぇ・・。



今回、DMax関数という関数を使いました。この関数は基本的に数値のフィールドに対して、最も大きい値を拾う関数です。ふつうは「数値型」のフィールドに対して使います。売上金額とか、観客動員数とか・・・。
テキスト型のフィールドの場合は、指定したフィールドの中で、一番下に来る値を拾います。ですんで、上のテーブルふたつを使って
DMax("番号" , "テストじゃ")
の答えを比べてみると、左は0514、右は9が答えとして返ってきます。これは主キーに限らず、他のフィールドでも同じですね。つまり、そのフィールドの中の値を昇順に並べ替えたとして、一番下にきた値を返すわけです。


■自作の移動ボタン

本題に戻りまして、次の課題です。次に、自分で移動ボタンを作ってみましょう。

いちおう、今回目標にするのは4つ。

「ひとつ前のレコードに移動するボタン」

「ひとつ後のレコードに移動するボタン」

「新規に入力するためのボタン」

「全部で何件レコードがあるか表示」

で、これらのボタンやテキストボックスを、どこに置こうかな、ということなんですけど・・・。どうしましょう。
フォームヘッダーの部分を広げて使おうかな。マウスでドラッグすれば、広さを調節できるので、とりあえず1〜2cmくらい広げてみましょうかね。

まず、コマンドボタンをひとつ作りましょう。

とりあえずふたつ作って、片方のプロパティシートを出しましょう。
いちおう、コマンドボタンには「コマンドXX」という名前が適当につくんですけど、もしわかりにくくなりそうならボタンの名前を変えてくださいね。
標題もお好きなものに変更してください。
うーん、そうですねぇ。[前へ]と[次へ]とか、そんなんでいいんじゃないですかね。

あたしはちょっとものぐさして、今回は名前を変えずにこのままいきます。標題だけ後で[前へ]と[次へ]に変えますね。


では、どっちかのコマンドボタンの「クリック時」のイベントを作ります。
もうみなさんこの辺の操作はオッケーですかね。えーと、じゃあ、左側のボタン(前に戻る)からいきましょうか。
そのボタンのイベントプロパティ欄の「クリック時」のところをクリックしましょう。
で、右端にビルドボタンが出てきたら、そいつをクリックします。

レコードの移動をするための命令文を書き込みます。

docmd.gotorecord スペースをひとつ空ける

と、上のようになにかガイドが出てくる仕掛けになってます。
どういうふうにレコードを移動するのか、後ろにいろいろ書かないといけないんですけど、それをサポートしてくれる機能が働いてるみたいですね。

その辺も活用しつつ、下のように入力します。

docmd.gotorecord , , acprevious

Previousは、「ひとつ前の」という意味です。で、全部入力できたらEnterキーを押して、赤い字のエラーにならないかどうか確認しましょう。
エラーになっちゃったら、多分どこかスペルが違うと思います。あるいはピリオドとカンマを間違えているとか。見直しましょう。