<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>在庫のザの字はどう書くの〜♪
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20



さて、では次に・・・えーと、同じ要領で[担当者]を社員を選択できるようにしましょうか。
コンボボックスを使う方法でいきましょう。せっかくだから。やり方は顧客コードのときとおなじです。

で、社員名をフォームのどこかに表示する場合は・・・。
前のページの顧客名のやり方と同様、2パターン考えられますよね。
コンボボックスから値を引っ張ってきて、Dlookup関数を使う方法と、クエリーを使う方法です。
両方、ちょっぴり解説しますね。参考にしてください。


【クエリーの場合】

クエリーを活用する場合は、さっき作ったクエリーに[社員マスター]テーブルを追加してやればいいですよね。
テーブルの追加は、ツールバーの[テーブル表示]ツールボタンをクリックすれば可能です。

で、上の図のように、3つのテーブルを結合させます。お?なんか違います?
あたしのクエリー、矢印がついてますね。結合線に・・・えへへ〜ちょっと工夫してみたんですよ。これね。


ここは、状況に合わせてってことになります。

担当社員を特に選ばない、担当者なしの出庫がありえると考えた場合のことをお話します。

クエリーを使いこなす際、どうしても必要になってくる考え方です。
すると当然、社員マスターと出庫テーブルを結ぶ値がないレコードがあるってわけで、このレコードはこのクエリー上に姿を見せなくなってしまうんですね。


いろいろテストを繰り返してたんで、わたしのテーブルはこんな状態になってました。
[担当者]のとこは、気にしないで先に進んでたんで、入力してないとこもあるし、[顧客コードを選んでないレコードもあります。

下のふたつのテーブルと見比べてみてください。
全部のテーブルに存在する情報となると・・・。
赤で印をした3レコードだけ、ってことになりますよね。


【社員マスター】

【顧客マスター】

まあ、そのほうが都合がよい、という場合もあると思うんですけどね。この場合、どうでしょう。
うっかり入力し忘れ〜なんてこともあると思うし、とりあえず[出庫テーブル]のレコードは全部出て来てもらわないと困りますよね。


こういう時、考え方はふたつ。

☆かならず[担当者]の入力をするようにする。

 必ず[出庫テーブル]と結びつくようにします。
 半ば運用でカバーって感じですね。

☆[出庫テーブル]を中心に出力するよう、結合の仕方を変更する。

 とりあえず今回こっちやってみようと思うんですけども・・・。よかったら見てみてください。
 結合線をダブルクリックすると、結合の仕方が3パターン選択できるんです。
 で、「出庫テーブルの全レコードと、◎◎テーブルの結合フィールドと同じレコードを...」というやつに変えます。
 [顧客マスター]と[出庫テーブル]の間の結合線も同様です。
 そうすると、結合線に矢印が出ます。上の図はその状態を表してます。

出庫テーブル主体の結合方法を選べばOK。

この「結合プロパティ」って、クエリー作ってく上で結構重要なポイントになります。
機能そのものを覚えるよりも、「こういうときどの結合の仕方がベストなのかな」と、
いろいろ頭の中でシュミレーションすることが大切です。

「で、どれを選べばいいの?」なんて言ってはいけません。ケースバイケースです。


【コンボから値を引っ張ってくる場合】

現状、レコードソースをクエリーに変更していない方は、同様にコンボボックスから値を取ってくるやり方をそのまま使えばよいでしょう。
今回はこっちの方が簡単かなー。

Private Sub 担当者_AfterUpdate()

Me![氏名] = Me![担当者].Column(1)

DoCmd.GoToControl "商品"
End Sub
Private Sub Form_Current()
Me![顧客名] = DLookup("顧客名", "顧客マスター", "[顧客コード] ='" & Me![顧客コード] & "'")

Me![氏名] = DLookup("氏名", "社員マスター", "[社員番号] ='" & Me![担当者] & "'")

End Sub

こちらは、2行目の太字の方を追加する形になりますね。


もし、「その顧客の顧客名だけじゃなくて、住所や電話番号も引っ張ってきたい」なんていうときは、非連結のテキストボックスの数を増やしていけばいいんですけど、た、大変そうですよねぇ・・・。

まあ、まず、テキストボックスを作った後、コンボボックスの書式プロパティの列数その他を、[顧客マスター]のテーブルのフィールドの並び順に応じて変更して、例えば、[顧客コード][氏名][住所][電話番号]の順に並んでるとしたら、

Private Sub 担当者_AfterUpdate()
Me![氏名] = Me![担当者].Column(1)
Me![住所] = Me![担当者].Column(2)

Me![電話番号] = Me![担当者].Column(3)

DoCmd.GoToControl "商品"
End Sub
Private Sub Form_Current()
Me![顧客名] = DLookup("顧客名", "顧客マスター", "[顧客コード] ='" & Me![顧客コード] & "'")

Me![氏名] = DLookup("氏名", "社員マスター", "[社員番号] ='" & Me![担当者] & "'")

Me![住所] = DLookup("住所", "社員マスター", "[社員番号] ='" & Me![担当者] & "'")

Me![電話番号] = DLookup("電話番号", "社員マスター", "[社員番号] ='" & Me![担当者] & "'")


End Sub

わはは〜もう、なにやってんだかわけわかんなくなってきますねぇ。
これはいわゆるどつぼ状態といって(いや、専門用語ではないんですが)、にっちもさっちもどうにもブルドックソースって感じになってしまいます。もう、2〜3日経つと自分でもどうしていいかわかんなくなっちゃってお蔵入り、の確率50%アップです。

こんな風に、参照して代入するフィールドの数が1種類(顧客名のみ)ではなくて、3種類も4種類も(住所も電話番号も〜)となる可能性がある場合は、前述のクエリーによる方法に切り替えた方がラク。早いうちに切り替えましょう。


まだテスト段階なんで、[出庫テーブル]にはめちゃくちゃなデータががんがんたまっちゃいますけど、とりあえず気にしない気にしない。あとでちゃんと整備しましょう。

さーて。できたできた。

・・・え?担当者が多すぎて、コンボボックスから選びにくい?いいじゃないですかそれくらい。我慢してくださいよ。

・・・・・わかりましたよ。なんか工夫してみましょう。じゃあ・・・営業所で絞り込むってことで、いいですか?