
お願いします。
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で質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) IFERROR、SMALL関数について 2 2022/08/22 23:40
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
このQ&Aを見た人はこんなQ&Aも見ています
-
ツリー構造をRDBで表現するには?
その他(データベース)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
アクセスVBAのMe!と[ ]
Access(アクセス)
-
5
ExcelのVBAでデータをツリー構造にしたい
Excel(エクセル)
-
6
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
9
Access レコード移動時イベントでサブフォーム
Access(アクセス)
-
10
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
-
11
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
12
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
13
AccessのTree View,List Viewの表現方法
その他(Microsoft Office)
-
14
Access VBA でデータペーストをする
その他(Microsoft Office)
-
15
Access レコードを追加できません。テーブル’○○’の結合キーがレコードセットにありません。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
テーブル設計について
-
アクセス フィールド名に変数...
-
inner join,left joi...
-
ACCESS ツリービューの作り方
-
SQL文で、合計が0のレコードを...
-
ACCESS 商品毎の最新の単価を設...
-
Accessの実行時エラーについて
-
差し込み後、元データを変更し...
-
for whichの使い方
-
エクセルの関数について教えて...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
誰か教えてください
-
python random.choice について
-
テーブルの内容とテーブルのカ...
-
SQLServerで文字列の末尾からあ...
-
スクリーンセイバー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
ACCESS 商品毎の最新の単価を設...
-
日付により変動する「単価」を...
-
アクセス フィールド名に変数...
-
ACCESSでDLookUpすると、不正な...
-
ACCESSでクエリ作成時複数のフ...
-
Excel VBA ADODB
-
異なるデータベース間のテーブ...
-
ACCESSのマスタの変更について
-
Access2013で商品に複数の単価...
-
SQL2005 クエリ文について
-
前月の取得について
-
日付の範囲検索で
-
アクセス★非課税、課税の合計金...
-
AS400にてサブファイルレコード...
-
自己結合について
-
SQL2005 クエリ文について
おすすめ情報