- ベストアンサー
Accessで別テーブルの値をフォームに表示する方法
- 初めてのAccessで分からない事があり質問させてください。
- 現在「会社テーブル」を表形式で一覧表示しています。会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)
- リレーション等でひっぱってくる事ができるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号") これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。 さて、かかるユーザ関数を標準ライブラリに登録したくない場合、 1、"社員ソートクエリ"を作成します。 SELECT 社員.会社ID, 社員.社員名 FROM 社員 ORDER BY 社員.ソート番号; 2、コントロールソースに次のように書きます。 =DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID]) http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx DLookup()については、マイクロソフトの解説を参照されてください。 【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】 マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。 http://www.happy2-island.com/access/gogo03/capter00307.shtml Public Function DBLookup(ByVal strQuerySQL As String, _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
> ソート番号が一番若い社員名を表示したいと考えています 「1社につき1名以上の社員が居るが、最初の1名だけ出れば良い」 すなわち「表示されるレコード数は会社テーブルのレコード数」でOK? 1)テーブルのうち、会社ID別のソート番号の最小値を求めるクエリを作る 2)1)のクエリを呼ぶクエリを作り、社員テーブルを追加して 会社IDとソート番号を関連付け、会社IDと社員名を求めるクエリを作る 3)2)のクエリを呼ぶクエリを作り、会社テーブルを追加して 会社IDを関連付け、会社IDと会社名と住所と社員名を求めるクエリを作る 4)3)のクエリからフォームを作る うまく作れば1)2)3)をひとつのクエリにできるけど、 順を追って作るほうが理解しやすいと思います。 1)2)は、昇順ソートとTop 1でひとまとめも可
お礼
お礼が遅くなって申し訳ありません なるほど、クエリでフォームを作成してしまえばいいのですね ただ、今回はその後の絞り込みの検索等色々しなくてはいけないので、その方法を模索する時間短縮の為に「標準モジュールに登録したユーザ関数」を使う方法を採用致しました 折角教えてくださったのに申し訳ありません 今後時間がある時に上記の方法を試してみようと思います ありがとうございました
お礼
お礼が遅くなって申し訳ありません 今回は「標準モジュールに登録したユーザ関数」を使わせて頂きました 他のデータベースやプログラムは経験があるのですが、Accessの表示に関する事がさっぱり分からなかったので非常に助かりました 本当にありがとうございました