
初めてのAccessで分からない事があり質問させてください。
<会社テーブル>
会社ID
会社名
住所
<社員テーブル>
会社ID
社員名
ソート番号
*1社に対し複数の社員レコードが存在
以上のようなテーブルがあるとします
現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)
色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません
リレーション等でひっぱってくる事ができるのでしょうか?
どなたか教えて頂けませんでしょうか
何卒よろしくお願い致します
PS.Access2013で作成中です
No.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/HA …
DLookup()については、マイクロソフトの解説を参照されてください。
【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】
マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。
http://www.happy2-island.com/access/gogo03/capte …
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

お礼が遅くなって申し訳ありません
今回は「標準モジュールに登録したユーザ関数」を使わせて頂きました
他のデータベースやプログラムは経験があるのですが、Accessの表示に関する事がさっぱり分からなかったので非常に助かりました
本当にありがとうございました
No.1
- 回答日時:
> ソート番号が一番若い社員名を表示したいと考えています
「1社につき1名以上の社員が居るが、最初の1名だけ出れば良い」
すなわち「表示されるレコード数は会社テーブルのレコード数」でOK?
1)テーブルのうち、会社ID別のソート番号の最小値を求めるクエリを作る
2)1)のクエリを呼ぶクエリを作り、社員テーブルを追加して
会社IDとソート番号を関連付け、会社IDと社員名を求めるクエリを作る
3)2)のクエリを呼ぶクエリを作り、会社テーブルを追加して
会社IDを関連付け、会社IDと会社名と住所と社員名を求めるクエリを作る
4)3)のクエリからフォームを作る
うまく作れば1)2)3)をひとつのクエリにできるけど、
順を追って作るほうが理解しやすいと思います。
1)2)は、昇順ソートとTop 1でひとまとめも可
お礼が遅くなって申し訳ありません
なるほど、クエリでフォームを作成してしまえばいいのですね
ただ、今回はその後の絞り込みの検索等色々しなくてはいけないので、その方法を模索する時間短縮の為に「標準モジュールに登録したユーザ関数」を使う方法を採用致しました
折角教えてくださったのに申し訳ありません
今後時間がある時に上記の方法を試してみようと思います
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access別のテーブルを参照してテキストボックスに値を表示、編集したい
Access(アクセス)
-
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
-
4
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
5
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
6
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
7
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
10
AccessでIDを入力したら他の項目も自動で表示
Access(アクセス)
-
11
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
12
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
13
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
14
新規レコード行を非表示にしたい
Access(アクセス)
-
15
access テキストボックスの値取得
Access(アクセス)
-
16
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
17
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
18
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
19
ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです
Access(アクセス)
-
20
アクセスでの、フォームとテーブルの連動の方法を教えてください
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
【アクセスVBA】テーブルにフィ...
-
最新の日付とその金額をクエリ...
-
access 自動採番 年が変わる...
-
Accessで日付が変わると番号が...
-
条件をつけて日付の古い行を抜...
-
vba 直前の操作はキャンセルさ...
-
チケット販売等の日付を持つテ...
-
アクセスで「空き番」の確認
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
Excelでセルの書式設定を使用し...
-
SQL文で素早くNULLを除外する方法
-
差し込み印刷のレコード数について
-
MERGE文を単体テーブルに対して...
-
select insertで複数テーブルか...
-
Access を×ボタンで閉じ...
-
CREATE テーブルでの複数外部...
-
SQLでデータを整形して取得可能...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
最新の日付とその金額をクエリ...
-
【アクセスVBA】テーブルにフィ...
-
access 自動採番 年が変わる...
-
Accessで日付が変わると番号が...
-
Accessでのレコード存在チェック
-
Recordset.FindFirstについて
-
vba 直前の操作はキャンセルさ...
-
access 自動採番 「10-AA-000...
-
Access 文字+年ごとの自動採番
-
アクセスで「空き番」の確認
-
[Access]異なるレコード間の文...
-
条件をつけて日付の古い行を抜...
-
【Access】選択クエリのグルー...
-
Access:抽出して、色をつけたい。
-
ACCESSでの行番号の自動採番
-
Access VBAで更新履歴を追いたい
-
sqlで質問です。 Aテーブルの登...
-
Oracle 8i に入っている値が、...
-
質問です。 下記のテーブルとデ...
おすすめ情報