<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--「連番」の考え方
  [実験1] [実験2] [注文表1] [注文表2] [注文表3]



「連番」の考え方--注文表を作ってみる1

基本的なトコ、いろいろ見ていただきましたが、いかがでしょうか。
こういう仕組みを利用して、なんかできそうでしょうか。

では、これを利用して、注文表みたいなのを作ってみようと思います。
といっても、「表形式のフォームで連続した行番号をふる」という動作を見ていただくのが主な目的なので、あんまり細かいことはやんないです。
サブフォームの作り方とか伝票番号の自動採番の方法とかそういうのは、別コーナーを覗いていってくださいね。

また、ちょっと横道にそれますが、フォームじゃなくてレポートなら、簡単に「連続した行番号」をふることができます。まあ、レポート上でレコードの削除とかしないですからね。しないですよね?っていうか、紙に印刷したあと、紙の上でレコード削除とかしようとしたってしょうがないですもんね。つーかどうやって削除すんです?紙の上で。テーブルとかクエリとかフォーム上とかでレコードを削除したあとまた印刷しなおすっていう考え方ならわかるけど。

だから、紙の上で再度番号をふりなおしたりすることもないし、こういうのはレポートのほうが何かと扱いやすいかもしれません。
レポートだと手軽な方法がいろいろあるんですが、一番のお勧めは「集計実行」っていうプロパティを利用するやりかたです。

非連結のテキストボックスを一個作って、↑コントロールソースに =1(数字の1を表示しろっていう意味になりますね)、「集計実行」を「全体」(グループ化しているレポートならグループ全体かな)を選べば、連続した番号がつきます。っていうかついてるように見えます。1を類計しているわけですね。ハハハ。
レポートだったらこの方法使ってみてください。レポートで連続番号を振りたいのなら、ややっこしいクエリなんか作る必要はありません。
くどいですがレポートの場合は、です。フォームではこんなことはできませんです。ので、やっぱさっきみたいな方法をやる必要があります。

そんなわけで、ちょっとした「注文表」を作ってみようかなと思ってます。よかったらトライしてみてください。



んじゃあ、テーブルつくりから・・・。
今回は、2×2個、全部で4つのテーブルを用意するつもりです。2種類のテーブルを、2つずつ、って感じです。

まず、こんな感じのテーブルを・・・。↓

次にこんな感じのテーブルを。↓

主キーはかならずつけてください。サブフォームにしようと思ってますんで、二つのテーブルのつながりはきちんとしておかなければなりません。そのためにも、それぞれのテーブルの主キーは何なのか、どのフィールドの中の値を頼りにデータを結び付けていったらいいのか、そのへんきちんとしておく必要があるわけですよね。

で、[注文テーブル]の方は、まったく同じデザインでもうひとつ作ります。
名前は、先頭にWでもつけるかな。

[注文明細テーブル]の方は、↑ちょっとだけフィールドを変えます。こんな感じにしてみました。
合計4つのテーブル↓が出来上がりました。

テーブル名はなんでもよいんですが、わけわかんなくなっちゃうってのはなしですよ〜

Wってついてるテーブルは、いわゆる「ワークテーブル」っぽく使おうと思ってます。
つまり、1回分の注文をWのテーブルに入力し、全部入力し終わったらふつうの注文テーブルにデータを移して、Wテーブルの中身は空っぽにする・・・。小さい桶で風呂桶に水を入れるみたいな感じにしようと思います。Wのテーブルが小さい桶。Wがついてないテーブルが風呂桶。
そんな感じで使っていきます。



そしたら、リレーションシップの設定をします。Wのテーブルを両方とも選んで、[注文番号]どうし結びます。

まあ、今日はあんまりいろんなことはやらないつもりなんで、「一対多」の結びつきができてればいいんですが、「参照整合性」を設定してみてもいいですね。

え?参照整合性って何かって?そいつはヘルプ探してみてくださいな。

ふたつのテーブルが[注文番号]で結び付けばオッケーです。
リレーションシップのウィンドウを保存して閉じましょう。



じゃあ、[W_注文明細テーブル]を利用して、さっき作ったみたいなクエリを作りますよ。
今回はちょっとテーブル名が長いんでDcount関数の入力が大変ですが、がんばって挑戦してみてください。
列名は、そうだなぁ。[番号]とでもしますかね。

あとは、[W_注文明細テーブル]のフィールドを全部選んで、完了です。
全部選ぶなら、W_注文明細テーブル*っていうのを選んでもいいんですが、今回はいちおう、フィールドグリッドにひとつひとつ列名を並べていってください。
クエリ名はお任せします。わかりやすいものを付けてくださいね。



で、このクエリと、W_注文テーブルを使って、サブフォームを作ります。
フォームウィザードが手軽ですね。リレーションシップの設定してありますから、ウィザードでもサブフォームを作ることができると思います。

まず、[W_注文テーブル]の全フィールドを右に移して、

今作ったクエリを選び、同様にフィールドを右に移せばオッケー。

サブフォーム部分は、データシートビューじゃなくて表形式のフォームのほうがいいかもしれません。どっちでもいいんですが・・・いろいろ作りこむなら、表形式のフォームのほうが見栄えよくできるかもしれません。これは好みの問題だけども。

あとは、次へ次へと進んで、完了ボタンをクリックしてください。



なんか、こんな感じになりました。

あ、まったく同じである必要はありませんからね。ちょっとくらい違ってもオッケーです。さっきの、リレーションシップの設定とか、元になるテーブルのデータ型とか主キーとかがちゃんとしてれば、フォームのデザインなんか違ったってそんなのたいした問題にはならんです。
サブフォーム部分、横に長くなってると思うんで、少し調節しますかね。

データシートビュータイプにした方は、横幅の調節が簡単にできると思うんで、ドラッグして列幅調節してください。

表形式のフォームにした方は、デザインビューにして、サブフォーム部分のテキストボックスとかラベルの幅をそっとそっと調節しましょう。



まあ、少しずつ整えますかね。
んじゃ、フォームビューに切り替えて(あるいは一度閉じて、メインのフォームのほうをもう一度開くとか)、1件入力してみましょう。

適当に伝票番号をつけて、注文日付と顧客名を入力します。
と、サブフォームのほうの「注文番号」にもなんか値が入りますか?
リレーションシップの設定が正しくなされてればそうなるはずですぞ。
サブフォームに「注文番号」が入ってこないとなると大事なので、Wのついてるテーブルのデザインと、リレーションシップの設定をもう一回見直してくださいね。

で、いよいよ・・・。
入力するのは↓「商品名」と「数量」と「単価」です。「番号」とか「注文番号」とか「ID」は入力できませんよ。っていうか触んなー!

「商品名」から右側のフィールドだけ入力してください。
この時点では「番号」はゼロだと思うんです(レコードセレクタにエンピツマークが出ている間)。
とりあえず、2〜3行入力してみてください。

「番号」、つきますか?
つけばオッケーっす。いったんこのフォームは閉じましょう。