お願いします。
ACCESS2003で、ツリービューを作りたいですが、なかなかうまくいきません。
「T部屋マスタ」というテーブルの「部屋名」フィールドを親、
「Q商品マスタ」というクエリの「プラン名」フィールドを子として設定し、
子をクリックすると、その詳細が表示される「F商品マスタ」フォームを起動させたいです。
「T部屋マスタ」には、「部屋名」「部屋コード」というフィールド、
「Q商品マスタ」には、フィールドがたくさんあるので、関係のありそうなものだと「商品コード」「プラン名」あたりかとおもいます。
初心者ですみません…。
この情報だけでわかるか心配ですが、
ご回答お願いします!
No.6ベストアンサー
- 回答日時:
No5の最初の部分について少し訂正です。
「T部屋マスタ」
部屋コード(数値型、あるいはオートナンバー)
部屋名
として、
「T商品マスタ」
商品コード(数値型、あるいはオートナンバー、主キーとしていない)
商品名
部屋コード(数値型)
部屋名
としています。
「T商品マスタ」は「T部屋マスタ」の部屋別に
同じ商品名が存在する可能性があるかもしれない、
という想定にしています。つまり
「T部屋マスタ」
部屋コード 部屋名
1 部屋A
2 部屋B
3 部屋C
「T商品マスタ」
商品コード 商品名 部屋コード 部屋名
1 プランA 1 部屋A
2 プランB 1 部屋A
3 プランB 2 部屋B
4 プランC 2 部屋B
5 プランC 3 部屋C
6 プランD 3 部屋C
のようなデータではないか、ということです。
さらに、このTreeに他のテーブルのフィールドを
載せるのならば、他のテーブルと「T部屋マスタ」
の関係、あるいは「T商品マスタ」との関係が
明確であること、すなわち部屋コードや部屋名が
ある、あるいは商品コードがある、のどちらかならば
Treeにフィールドを追加できます。ただ、
「Q商品」はどのようなTreeeを形成するために
作成したのか、ただテーブルがこのようにありますと
示されても上記のような設計になっているのか
分からないので、そのまま「Q商品」のフィールドを
ノードに追加していっても意図したTreeになる
ということはまったく保証できません。
TreViewを設定するときはデータの設定、
つまりテーブルの設計と親子関係を
明確にするフィールドの設定が非常に
重要で、アバウトな設計ではTreeViewは
形成できません。
No.5
- 回答日時:
所用で遅くなりました。
Q商品の構造そのものがわからないことや、
補足のコードの内容などから、
データをどのように表示したいのか
不明なので、一応こちらで「T商品マスタ」
の表示までを設定しておきます。
なお、T商品マスタのフィールドは以下のようだと
します。なお、部屋コード、あるいは部屋名
はどちらかがあればデータとしては十分です。
商品コード(数値型、あるいはオートナンバー)
商品名
部屋コード(数値型、あるいはオートナンバー)
部屋名
Private Sub Form_Load()
Dim dbs As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim nod As Node
Dim objTree As TreeView
Dim strText1 As String
'Dim key1 As String
Dim strText2 As String
Dim pkey2 As String
Dim key2 As String
Set dbs = CurrentDb
Set rs1 = dbs.OpenRecordset("SELECT * FROM T部屋マスタ ORDER BY 部屋名", dbOpenDynaset)
Set rs2 = dbs.OpenRecordset("T商品マスタ", dbOpenDynaset)
Set objTree = Me!TreeView0.Object
objTree.Nodes.Clear
'ルートノード
Set nod = objTree.Nodes.Add(, , "root", "プラン")
'部屋の設定
Do Until rs1.EOF
strText1 = rs1![部屋名]
Set nod = objTree.Nodes.Add("root", tvwChild, strText1, strText1)
rs1.MoveNext
Loop
'部屋別を開いておく
nod.EnsureVisible
'部屋別プラン設定
Do Until rs2.EOF
pkey2 = rs2![部屋名]
key2 = "a" & rs2![商品コード]
strText2 = rs2![商品名]
Set nod = objTree.Nodes.Add(pkey2, tvwChild, key2, strText2)
rs2.MoveNext
Loop
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
dbs.Close: Set dbs = Nothing
End Sub
Q商品マスタの中のT商品マスタと他の
テーブルとの関係、あるいは他のテーブルの
フィールド、などもろもろが分からないので、
一応、こちらで設定できるコードはこのような
ところです。
No.4
- 回答日時:
確認と追加ですが、
TreeView0というのはTreeViewコントロールの名前
としています。そのように名前をつけていると
いうことでよろしいでしょうか。
この回答への補足
コントロール名がTreeView4になっていました・・・。
TreeView0に直して、エラーは出なくなりました。
ありがとうございます。
「Q商品マスタ」に関連付けされているテーブルは
T商品マスタ
T朝食マスタ
T夕食マスタ
T日帰りマスタ
T料金
T子供料金
です。
「Q商品マスタ」には、「T部屋マスタ」の「部屋名」「部屋コード」が存在していて、
「部屋名」「部屋コード」はそれ以外はない状態です。
No.3
- 回答日時:
「Q商品マスタ」で「T部屋マスタ」以外に
「部屋名」または「部屋コード」をもつ
テーブルが存在するのかで、TreeViewが
形成できるかのポイントになりますが。
そのことは必要ならば後で補足してください。
補足にある、
>「指定された式で参照されている'TreeVew0'フィールドが
>見つかりません」と出ます。
というのは、TreeViewのオブジェクトを設定してそれに
TreeView0を設定する必要があります。したがって、
Dim tvw As TreeView
Set tvw = Me!TreeVew0.Object
のようにして、このtvwを使ってノードへのデータ
追加をします。
補足での、
>Set nod = .Add(, , "root", "部屋名", "T部屋マスタ")
は、メンバをすべて表示すると、
>Set nod = Me!TreeView0.Nodes.Add(, , "root", "部屋名", "T部屋マスタ")
となりますが、
Set node = tvw.Nodes.Add(, , "root", "部屋名", "T部屋マスタ")
のように使います。
冒頭で述べたように「Q商品マスタ」の中身がわからないので
データがノードにセットできるかかこちらでは確認できません。
また、Treeの階層が二つなのか、あるいは階層が
二つ以上あるのかによって、コードは大きく
変わります。階層が二つ以上ある場合は再帰処理を
する必要があります。そのあたりはどうでしょうか。
No.2
- 回答日時:
No1です。
以下のサイトにTreeViewの基本的な使い方の
サンプルがあります。これをみてTreeViewを
形成するのにどのようなデータが必要か
確認してみてください。
http://www.tsware.jp/study/indexv10.htm
この回答への補足
お返事ありがとうございます♪
「Q商品マスタ」にも「部屋名」「部屋コード」フィールドが存在します。
「Q商品マスタ」は、「T部屋マスタ」とそれ以外のテーブルをあわせたものになります。
下記のような感じでよいのでしょうか・・・?
初心者で、基本があまりわかっていないので、四苦八苦しています・・・。
教えていただいたサイトのサンプルを見ながら作ってみましたが、
下記の記述で動かすと、
「指定された式で参照されている'TreeVew0'フィールドが見つかりません」と出ます。
Private Sub Form_Load()
Dim dbs As Database
Dim rst As Recordset
Dim nod As Node
Dim strKeyCode As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("SELECT * FROM T部屋マスタ ORDER BY 部屋名")
With Me!TreeView0
'ルートにもラインを表示
.LineStyle = tvwRootLines
'ラベルの編集を不可とする
.LabelEdit = 1
With .Nodes
'すべてのノードをクリア
.Clear
'ルートノードを追加
Set nod = .Add(, , "root", "部屋名", "T部屋マスタ")
'コントロールキーを初期化
strKeyCode = ""
'全レコードをノードとして追加
Do Until rst.EOF
If strKeyCode <> rst!部屋名 Then
'コントロールキーが変わったら
'商品区分をrootノードの子ノードとして追加
Set nod = .Add("root", tvwChild, rst!商品名, rst!Q商品マスタ)
'コントロールキーを更新
strKeyCode = rst!商品名
End If
Loop
End With
End With
rst.Close
End Sub
No.1
- 回答日時:
TreeViewを設定する場合、親子関係が明確なデータが
必要になります。質問の場合、
テーブル フィールド
「T部屋マスタ」 、「部屋名」「部屋コード」
になっていますが、
クエリ「Q商品マスタ」には 「T部屋マスタ」にある
「部屋コード」があること、あるいは「部屋名」
があることが必須となります。
つまり、「T部屋マスタ」と「Q商品マスタ」に共通の
キーワードが存在しないとTreeViewを形成することが
できません。
「T部屋マスタ」と「Q商品マスタ」の関係がひとつ
明確に伝わってこないので今のところこのような
回答しかできません。
共通で明確なキーワード(フィールド)が両方に存在するならば
容易にTreeViewを形成できます。
容易と言っても、質問の場合は親の設定、子の設定の順に
それぞれをTreeViewのノードにデータをループ処理しながら
追加していく、という作業が必要になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ツリー構造をRDBで表現するには?
その他(データベース)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
ツリービューを使って、エクスプローラのようなものを作りたい。
Visual Basic(VBA)
-
-
4
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
5
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
6
アクセス データの競合を非表示にしたい
Access(アクセス)
-
7
コンボボックスにキー入力をさせない方法(ACCESS VBA)
その他(プログラミング・Web制作)
-
8
ACCESSでテーブルにあるチェックボックスを一括でYesにする方法を教えてください
Access(アクセス)
-
9
新規レコード行を非表示にしたい
Access(アクセス)
-
10
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
11
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
12
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
13
Access→Excelへエクスポートすると日付の表示形式が変化する
Excel(エクセル)
-
14
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
15
サブフォームが見えなくなる。
Access(アクセス)
-
16
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
17
AccessのTree View,List Viewの表現方法
その他(Microsoft Office)
-
18
ExcelVBAでListViewが使用できない
Visual Basic(VBA)
-
19
YES/NO型の値
Excel(エクセル)
-
20
親・子リンクフィールドの設定は、どうすればよいのでしょうか。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
ACCESSでクエリ作成時複数のフ...
-
SQL文で、合計が0のレコードを...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
重複していないレコードの抽出...
-
列番号による項目の取得について
-
エラー 1068 (42000): 複数の主...
-
select文のwhere句に配列を入れ...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
日本語のエイリアスは" "で囲...
-
エクセルの関数について教えて...
-
JANコードとPOSコードは同じ?
-
Access パラメータクエリをcsv...
-
広告ブロッカーのアドカードと...
-
副問合せの書き方について
-
エクセルVBAでEdate関数は使え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
ACCESS 商品毎の最新の単価を設...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
日付により変動する「単価」を...
-
アクセス フィールド名に変数...
-
異なるデータベース間のテーブ...
-
Excel VBA ADODB
-
ACCESSでクエリ作成時複数のフ...
-
前月の取得について
-
ACCESSのマスタの変更について
-
AS400にてサブファイルレコード...
-
ユニオンクエリ?レポートにて...
-
ACCESSでDLookUpすると、不正な...
-
Access2013で商品に複数の単価...
-
Accessの不一致クエリについて
-
accessの使い方
-
アクセス★非課税、課税の合計金...
-
クロス集計クエリで空レコード...
おすすめ情報