hatena の Microsoft Access 掲示板



[7192] フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:ayuuy Date:2017/07/05(水) 22:11 [ 返信 ]
テーブル「base」にある客先(数値)を元に「jusho」の正式名をフォームに表示したいです。

テーブル「nakami」にある完了(数値)を元に9は完了、5は分割、空欄は未処理という風にフォームに表示させたいです。

どのようにすればよいのでしょうか。accessの中身は以下になります。


3つのテーブルがあります。
1つめのテーブル[base]
・番号(主キー)
・品名
・重量
・客名

2つめのテーブル[nakami]
・番号(1つの番号に対して複数の行った日、行為、完了)
・行った日
・行為
・完了
・id(主キー)
例)
番号 対処した日   対処した内容  完了
1   6/1         a      9   
1   6/2         b      2   
1   6/3         c         

3つめのテーブル[jusho]
・客先(主キー)
・正式名
・住所

クエリで各base、nakamiのフィールドを全て選択し、番号の抽出条件に[bangou]と入力
クエリ名はそれぞれbase_c、nakami_cになります。

それぞれのクエリを元にフォームを作成
フォーム名はクエリと同じ名前です。

非連結のフォームを作成(名前はbase_nakami)
非連結のテキストボックスを作成し、名前はbangou
base_nakamiにサブフォームとしてbase_c、nakami_cを挿入
bangouに番号を入れるとその該当する番号のレコードが表示されるように設定

[7195] RE:フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:hatena Date:2017/07/06(木) 11:39
> 非連結のフォームを作成(名前はbase_nakami)
> 非連結のテキストボックスを作成し、名前はbangou

このテキストボックスを右クリックして「コントロールの種類の変更」→「コンボボックス」でコンボボックスに変換します。

コンボボックスの「値集合ソース」のビルドボタンをクリックします。
クエリのデザインビューが開きますので、base、jusho を追加します。
両者を「客先」フィールドで結合します。
baseの番号、品名、重量 をダブルクリックしてフィールドに表示させます。
jusho の 正式名 もダブルクリックしてフィールドに表示させます。
番号 の並び替えを昇順に設定します。
クエリデザインビューを閉じます。
値集合ソースにSQLが設定されています。

コンボボックスのプロパティを下記のように設定します。

列数 4
列幅 2cm;0cm;0cm;0cm


テキストとボックスを3つ配置して、それぞれのコントロールソースを下記のように設定します。

=[bangou].[Column](1)

=[bangou].[Column](2)

=[bangou].[Column](3)

これで、テキストボックスに、品名、重量、正式名 が表示されます。

[7199] RE:フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:ayuuy Date:2017/07/06(木) 17:33
上記通り設定したところ、正式名が表示されました。
ありがとうございます。


もう一つ質問のテーブル「nakami」にある完了(数値)を元に9は完了、5は分割、空欄は未処理という風にフォームに表示の件は、それ専用のテーブルを作成し、上記通りに設定する形でしょうか。
または他の方法がありますか。

よろしくお願いします。

[7200] RE:フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:hatena Date:2017/07/06(木) 21:56
9は完了、5は分割、空欄は未処理 の3つだけなら、
テキストボックスを作成して、コントロールソースを

=Switch([完了]=9,"完了",[完了]=2,"分割",[完了] Is Null,"未処理")

とする方法もあります。

もちろん、
専用のテーブルを作成して、それをコンボボックスの値集合ソースにして、上記のようにColumnで参照するという方法でもいいです。

[7201] RE:フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:ayuuy Date:2017/07/07(金) 18:44
ありがとうございます。希望通り、出来ました。

気になる点があるのですが、
コンボボックスを利用してテキストボックスに指定したフィールドを表示する件ですが、コントロールソースに直接フィールド名を設定またはdlookup関数で使用した場合は、比較的に早く表示されますが、
Columnを使用した場合は、若干タイムラグがあります。
データが多いと表示されるまでに時間がかかるのでしょうか。

「dlookup関数 遅い」とネットで検索するとColumnの方が早いという回答がありましたが、逆に表示されるのが遅いです。なぜでしょうか。

[7202] RE:フォーム上でフィールドを元に別の内容を表示、、その他方法 Name:hatena Date:2017/07/07(金) 21:40
私自身はあまりそういうことに気づいたことはないです。


下記は推測ですが、

コントロールソースにDLookup関数等の式を設定すると、
表示されるときに評価されるようです。

レコードソースのレコードセットのレコード数が1000で画面上に表示されているレコードが10の場合、10のみ評価されます。
スクロールして、表示されるたびに評価されることになります。

ですので、最初の表示は速く感じます。

しかし、例えば、DLookup関数を含むフィールドで検索したり、集計しようとすると途端に重くなります。(集計するときは、レコードソースのクエリで式を設定することになりますが。)

用途に合わせて使い分けるといいでしょう。


一番いいのは、クエリでテーブルを結合して、表示される方法だと思います。
オートルックアップクエリといいます。

オート ルックアップ クエリを作成するには
https://support.microsoft.com/ja-jp/help/879978

[7203] RE:【解決】フォーム上でフィールドを元に別の内容を表示、、 Name:ayuuy Date:2017/07/09(日) 11:21
オートルックアップクエリが一番いいのですね。
アドバイスありがとうございました。


  



無料レンタル掲示板・日記・ブログ Progoo