AIと戦って、あなたの人生のリスク診断 >>

http://www.tsware.jp/study/vol10/comctl_10.htm
上記のHPにてTree ViewとList Viewの連動を試したりしているのですが、このList Viewの表現方法をTree Viewのようにすることは可能でしょうか。

▼商品区分
 △飲料
 △加工食品
 △菓子類
 ▼魚介類
  商品名   単価 在庫
  特選味のり 1800   0
  北海道昆布 4400  10
  やきいか…  200  10
  ・
  ・
  ・
 △穀類、シリアル
 △調味料
 △肉類
 △乳製品

上のように、△をクリックすると▼になり、中に明細が表示される、というかんじです。
もしくはこのような表現はAccessでは難しいでしょうか。
わかるかたいましたらよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> このList Viewの表現方法をTree Viewのようにすることは可能でしょうか。



TreeViewコントロールは使用したことがあるものの、ListViewは使用したことが
ないのですが、その性質上、無理ではないかと思います(汗)


但し、Accessのバージョン次第になりますが(確か2002以降だったかと・・・(汗))、

> △をクリックすると▼になり、中に明細が表示される、というかんじです。

については、全くそのままというわけではありませんが(→「△/▼」ではなく「+/-」
表示、など)、ほぼご要望を満たすと思われる『サブデータシート』機能が標準で
組み込まれていますので、そちらを使用してみてはいかがでしょうか。

使用法は、TreeViewコントロール等に比べれば、ごく簡単で、
 ・「飲料、加工食品、菓子類・・・」等の『商品区分』の一覧となるテーブル
  またはクエリをレコードソースとするフォーム
 ・「特選味のり、北海道昆布、りんごジュース・・・」等の『商品』の一覧となる
  テーブルまたはクエリをレコードソースとするフォーム
の2つのフォームを作成し、前者を親、後者を子とするサブフォーム構成にし、
『商品区分(コード)』をリンクフィールドとして、それぞれをデータシートビューにする
だけです。

※既にAccessの標準コントロール以外に手を出されているようですので、
  詳細な手順の説明は省略させていただきました。
  なお、『サブフォーム』コントロールは、フォームのデザインビューで、『フォーム
  デザイン』ツールバーの『サブフォーム/サブレポート』で追加できます。
  また、サブフォームコントロールのプロパティシートの『データ』タブにある
  『ソースオブジェクト』の項目で、既存のフォームをサブフォームとして表示
  させることができます。


リンク先と同じサイト様の、サブデータシートの一括表示/非表示も、合わせて
参考として挙げておきます(コマンドによるものと、プロパティによるものの2種):
http://www.tsware.jp/tips/tips_252.htm
http://www.tsware.jp/study/vol13/prop_137.htm
    • good
    • 0
この回答へのお礼

返事が非常に遅れて申し訳ありません
早速教えてもらえた方法でいろいろと試してみます
ありがとうございました

お礼日時:2010/02/23 08:45

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS ツリービューの作り方

お願いします。

ACCESS2003で、ツリービューを作りたいですが、なかなかうまくいきません。
「T部屋マスタ」というテーブルの「部屋名」フィールドを親、
「Q商品マスタ」というクエリの「プラン名」フィールドを子として設定し、
子をクリックすると、その詳細が表示される「F商品マスタ」フォームを起動させたいです。

「T部屋マスタ」には、「部屋名」「部屋コード」というフィールド、
「Q商品マスタ」には、フィールドがたくさんあるので、関係のありそうなものだと「商品コード」「プラン名」あたりかとおもいます。

初心者ですみません…。
この情報だけでわかるか心配ですが、
ご回答お願いします!

Aベストアンサー

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は
形成できません。

No5の最初の部分について少し訂正です。

「T部屋マスタ」
部屋コード(数値型、あるいはオートナンバー)
部屋名

として、

「T商品マスタ」
商品コード(数値型、あるいはオートナンバー、主キーとしていない)
商品名
部屋コード(数値型)
部屋名

としています。
「T商品マスタ」は「T部屋マスタ」の部屋別に
同じ商品名が存在する可能性があるかもしれない、
という想定にしています。つまり

「T部屋マスタ」
部屋コード  部屋名 
1       部屋A
2       部屋B
3       部屋C


「T商品...続きを読む

Qツリービューの使い方が・・・

VBのカスタムコントロールはほとんどさわったことがないので、ぜんぜんわからないです。
初心者っぽい質問で申し訳ないのですが、プロセスとプロセスがもっているスレッドを、プロセスID&スレッドIDをキーにツリー構造を持たせたいのですが、ツリービューのツリーへのアクセスのしかたがわかりません。
MSDNライブラリが壊れているようで、ヘルプが出ないのです。
新しいMSDNライブラリ入れてから、トラブル続き。

TreeView1.Nodes.Add , , "キー", "値"
TreeView1.Nodes.Add , , "キー\サブキー", "値"

じゃなさそうみたいです。

かといってそれぞれのノードが小枝への参照をもっているわけでもないし、小枝を追加するメソッドをもっているわけでもないし。

単純に小枝への追加のしかたが知りたいだけなんですけど・・・。
だれか教えてください。

Aベストアンサー

>はい、その点はわかっております。
わかってくださったようでうれしいです。

tvwChild の上にカーソルがある状態で「F1キー」を押したら、MSDNに情報が出ませんか?
僕のMSDNは「ツリー ビュー (TreeView) コントロールの定数」というのが開きました。

>インターフェースを作るのが後回しになって、結局内部だけ作って、中途半端な状態で終わっちゃう
わかります。その気持ち。。。
よく僕もあります。

僕も内部のパーツから作ります。画面なんてどうにでもなるし、パーツを作りこんでいるうちに最初リストビューにしようと思っていたことが、ツリービューの方がいいかもと思えることもあるので、画面を最初から作るはめに・・・なんてことがないようにしたいですしね。

まぁ何にせよ、がんばってください。

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

QTreeViewコントロールについて

いつも参考にさせて頂いてます。

早速ですが、DBの値をTreeViewを使用して表示したいと思っています。
DBには、
CD   機能1  機能2  機能3
CD1   A1   B1    C1
CD1   A1   B2    C2
CD1   A1   B2    C3
CD2   A2   B3    C4

見たいな感じでデータが登録されています。
これをTreeViewに、
CD1
 LA1
   LB1
   | LC1
   LB2
     LC2
     LC3
CD2
 LA2
   LB3
     LC4
と出力させたいのですが、どうしたらよいか見当もつきません。
いろいろ調べて再帰呼び出しで出来るんじゃないかと思うのですが、
再帰処理にに詳しくない為、先に進むことが出来ません。

どうしたら実現できるか、力をお貸しください。
宜しくお願い致します。

Aベストアンサー

No.2 です。

> 'System.Web.UI.WebControls.~~'

すいません。TreeViewって、Windowsアプリの TreeView (System.Windows.Forms.TreeView) ではなかったのでしょうか?私すっかりWindowsアプリだとばっかり考えておりました。すみません。。。

上記のクラスをお使いということは、Web アプリ(ASP.NET?)でしょうか。であれば、私は門外漢なので、お答えできません(^^;。

ASP.NET はよく知らないのですが、取り急ぎ、ASP.NETでの TreeView 作成に参考になりそうなサイトだけ見つけたので書いておきます。以下のサイトから、「IE WebBrowserコントロール」の、「TreeView」に関する記述をご参照ください。

http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html

また、ASP.NET には 以下のカテがあり、そちらの方がご回答いただけると思いますので、カテを変えてご質問されることをお勧めいたします。

プログラミング > Microsoft ASP
http://oshiete1.goo.ne.jp/c249.html

お役に立てずすみません。

No.2 です。

> 'System.Web.UI.WebControls.~~'

すいません。TreeViewって、Windowsアプリの TreeView (System.Windows.Forms.TreeView) ではなかったのでしょうか?私すっかりWindowsアプリだとばっかり考えておりました。すみません。。。

上記のクラスをお使いということは、Web アプリ(ASP.NET?)でしょうか。であれば、私は門外漢なので、お答えできません(^^;。

ASP.NET はよく知らないのですが、取り急ぎ、ASP.NETでの TreeView 作成に参考になりそうなサイトだけ見つけたので書いておきます...続きを読む

Qツリー構造をRDBで表現するには?

ACCESSのようなRDBで階層構造を管理する場合のテーブル構造の定石ってあるんでしょうか。
「部品表」のようなものをデーベース化したいのですが、イマイチしっくりきません。
例えばAという部品はBとCという部品で構成されています。BはDとEとF。
FはAとEで成り立っているというようなものです。
この階層がどれくらい続くかは、任意に決定されねばなりませんし、もちろん各部品の親子関係もどこからでもできるだけ解かり易い形で表示可能にしなければなりません。
Windowsのエクスプローラーのような表現が理想なのですが、各階層毎には表現できても、全体の繋がりがどうも・・・
こういう場合によく使われる基本的なテーブル構造というのがあれば教えて下さい。

Aベストアンサー

>特にコレクションのゴミ掃除の部分なんかはチンプンカンプンです。

あんまり気にしなくても良いんですが(「ゴミ掃除」に関してはそのまま書き写すだけで動作しますんで)、ちょっとだけ解説します。

えと、まず、一つの部品に付きフォームが1枚ですんで、複数の部品を同時に表示するためには、それだけの枚数のフォームを用意しなければならない。

あらかじめフォームを10個も20個も作っておくのはあまりにも非現実的ですんで、最初に汎用的なフォームを1枚作っておいて、必要に応じてその複製を画面に表示するようにしよう、と。

で、フォームの複製を作る(*1)のは良いんですが、どこかにそれを保存しなくちゃならないんですよね。
そこで、BuhinWins って名前を付けたコレクションを作成(*2)し、新しくウインドウを作るごとにそこに登録(*3)するようにしたわけです。
*1 Set frmBuhin = New Form_F部品
*2 Public BuhinWins As New Collection
*3 BuhinWins.Add frmBuhin

ここまではいいんですが、そのウインドウを×して閉じた後でも BuhinWins 内のデータは勝手に消えてくれず、無効なウインドウのデータがゴミとして残ってしまうのです。

例えば、10枚のウインドウを開いたとすると、BuhinWinsには10枚分のデータが登録されます。
そのあと4枚のウインドウを閉じた場合、画面上に表示されているウインドウは6枚でも、BuhinWinsには有効なデータ6枚分に加えて無効なデータが4枚分が登録されています。

ってことで、「ゴミ掃除」の部分で無効なデータを見つけては、これを削除するってことをやってるわけです。



>ところでVBのツリービューコントロールというのは、手に入れさえすれば、初めてでも割と簡単に使えるものなのでしょうか?

んーと、VB(A)初級者には若干キツイ部分もあるかもしれません。
TreeViewの取り扱い自体が多少複雑なのに加えて、これに関するヘルプの項目もあんまり親切じゃないんですよね~。
ヘルプの読み方のコツが身についてないと、概要を理解するだけでも苦労するかもしれないです。
ただ、他の方法で同種のインターフェースを作るのに比べたら、遥かに楽な方法であることは断言できます。

VBについての市販本はたくさん出版されているので、まずは大型の本屋を物色して、TreeViewについて詳しく書かれている本を買ってきて、それを見ながら勉強するのがいいのではないかと思います。



>ある製品を指定することで、その製品の全部品を一括でレポートにすることは可能でしょうか?

可能ですが、こっちもVBAの世話になる必要があります。
印刷用の一時テーブルを作っておいて、そこに部品一覧をぶち込みます。
アルゴリズムの概要だけ書くと、

(テーブルの構成)
一時テーブル
 コード(テキスト型)
 親部品ID
 部品ID
  :


dim RS as Recordset '一時テーブル
Dim RSParts '構造テーブル

'一時テーブルの中身をクリア(略)
  :
SET RS=OpenRecordset("一時テーブル")'一時テーブルを開く

'カレーうどん自体を、RSに追加
 RS.AddNew
 RS![コード]="01"
 RS![親部品ID]=null
 RS![部品ID]="カレーうどん"
 RS.Update

RS.MoveFirst
Do Until RS.EOF'レコードの末尾に達するまで繰り返す
  BuhinID=RS![部品ID] '現在のレコードに書かれている部品IDを取得
  Code=RS![コード]

  'BuhinIDで指定された部品の構成部品を検索する
  Set RSParts=OpenRecordset("SELECT * FROM 構造テーブル WHERE 部品ID=" & BuhinID)
   counter=1
   do until RSParts.eof
    RS.AddNew
    RS![コード]=code & format$(counter,"00")
    RS![親部品ID]=BuhinID
    RS![部品ID]=RSParts![構成部品ID]
    RS.Update
    RSParts.MoveNext
    Counter=Counter+1
   loop

  RS.MoveNext'次のレコードに移動
Loop

こんな感じですね。
[コード]フィールドで並べ替えを行ったり、階層の深さを測ったりします。

うまく動いたとすると、以下のように[コード]が生成されているはずです。
コード 部品ID
01 カレーうどん
0101 うどん
0102 カレー
010101 水
010102 うどん玉
010201 カレー粉
 :
01020101 ターメリック
01020102 ガラムマサラ

相変わらず長文だ~

>特にコレクションのゴミ掃除の部分なんかはチンプンカンプンです。

あんまり気にしなくても良いんですが(「ゴミ掃除」に関してはそのまま書き写すだけで動作しますんで)、ちょっとだけ解説します。

えと、まず、一つの部品に付きフォームが1枚ですんで、複数の部品を同時に表示するためには、それだけの枚数のフォームを用意しなければならない。

あらかじめフォームを10個も20個も作っておくのはあまりにも非現実的ですんで、最初に汎用的なフォームを1枚作っておいて、必要に応じてその複製を...続きを読む

QAccess 入力規則で設定できる数字桁数は?

どなたか助けてください。

入力規則で13桁以上入力できないように、入力規則に[<10000000000000]と設定しています。
しかし、なぜか11桁以上入力すると「この入力した値は不正です」とエラーメッセージが表示されてしまいます。

これって入力規則に設定できる最大桁数のMAXが決まっているのでしょうか?
どこで調べたらよいのか分からなかった為質問してみました。

すいませんがよろしくお願いします。

Aベストアンサー

この項目は、
 データ型が数値型で
 フィールドサイズが長整数型の設定ではないですか?

これなら、長整数型で制限がかかります。

倍精度浮動小数点型に変更してみてください。

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

Qフォームウィンドウを最前面に表示したい(ACCESS)

ACCESS VBAを使っています。
あるタイミングで、あるフォームを表示させたいのです。
OpenFormを使ってみると、確かにフォームを開くことはできたのですが、実際は既に表示されているWindowの背面に開かれているので、目で確認することはできないのです。
新しいフォームを最前面に表示するにはどのようにしたらよいのでしょうか?

Aベストアンサー

docmd.OpenForm フォーム名,,,,,acDialog
とするか
表示させたいフォームの ポップアップのプロパティを
はい に すれば 出来ると思います。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QTreeViewに重複する値をセット

VB2005Expressで開発しています。

TreeViewにデータテーブルの値をセットして表示しています。
セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。左図のようにしたいのですが、右図のようになってしまいます。
あ あ
|-い |-い
| | | |
| -う | -う
お | -え
|-い お
| |
| -え
ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方が
いらっしゃいましたら教えて下さい。下記がPGMです。

'処理内容:TreeViewにデータテーブルの値をセット
Private Function fncTreeViewSet() As Boolean
Dim dTbl As DataTable
Dim Node As TreeNode
Dim intMenuNo As Integer
Dim strMenuName1 As String
Dim strMenuName2 As String
Dim strMenuName3 As String
Dim strMenuName4 As String
Dim strMenuName5 As String
Dim i As Integer

Node = TreeView1.SelectedNode
dTbl = dsDataSet.Tables("Mメニュー")

For i = 0 To dTbl.Rows.Count() - 1
intMenuNo = 0
strMenuName1 = ""
strMenuName2 = ""
strMenuName3 = ""
strMenuName4 = ""
strMenuName5 = ""

strMenuName1 = Trim$(dTbl.Rows(i)("階層1"))
intMenuNo = dTbl.Rows(i)("工程番号")
strMenuName2 = Trim$(dTbl.Rows(i)("階層2").ToString)
strMenuName3 = Trim$(dTbl.Rows(i)("階層3").ToString)
strMenuName4 = Trim$(dTbl.Rows(i)("階層4").ToString)
strMenuName5 = Trim$(dTbl.Rows(i)("階層5").ToString)

If strMenuName1 = "" Then
Else
If strMenuName2 = "" Then
TreeView1.Nodes.Add(strMenuName1) '階層1をセット
Else
If strMenuName3 = "" Then
fncSerchNode(strMenuName1)
TreeView1.SelectedNode.Nodes.Add(strMenuName2) '階層2をセット
Else
If strMenuName4 = "" Then
fncSerchNode(strMenuName2)
TreeView1.SelectedNode.Nodes.Add(strMenuName3) '階層3をセット
Else
If strMenuName5 = "" Then
fncSerchNode(strMenuName3)
TreeView1.SelectedNode.Nodes.Add(strMenuName4) '階層4をセット
Else
fncSerchNode(strMenuName4)
TreeView1.SelectedNode.Nodes.Add(strMenuName5)
End If
End If
End If
End If
End If
Next

TreeView1.SelectedNode = Nothing
End Function


'処理内容:指定ノード選択
Private Function fncSerchNode(ByVal strMenuName As String) As Boolean
Dim Node As TreeNode

For Each Node In fncGetAllNodes(TreeView1.Nodes)
If Node.Text = strMenuName Then
TreeView1.SelectedNode = Node
Exit For
End If
Next
End Function


'処理内容:子ノードも含んだすべてのノードを取得
Private Function fncGetAllNodes(ByVal Nodes As TreeNodeCollection) As ArrayList
Dim Ar As New ArrayList
Dim Node As TreeNode

For Each Node In Nodes
Ar.Add(Node)
If Node.GetNodeCount(False) > 0 Then
Ar.AddRange(fncGetAllNodes(Node.Nodes))
End If
Next

Return Ar
End Function

VB2005Expressで開発しています。

TreeViewにデータテーブルの値をセットして表示しています。
セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。左図のようにしたいのですが、右図のようになってしまいます。
あ あ
|-い |-い
| | | |
| -う | -う
お | -え
|-い お
| |
| -え
ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方が
いらっしゃいましたら教えて下さ...続きを読む

Aベストアンサー

fncSerchNodeで探しているノードが Node.Textとの比較でしか探していないのが原因でしょう

探すノードまでフルパスを検索してやれば希望通りになると思います
呼び出し側で 『階層5』を追加するための『階層4』ノードの検索に
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3 & "\" & strMenuName4)
と 階層1から階層4までを "\"でつないだ物をキーに探します

階層3を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3)

階層2を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 )

階層1を探すなら
fncSerchNode(strMenuName1 )

fncSerchNodeのIf Node.Text = strMenuName Then を
If Node.FullPath = strMenuName Then
としてみてください

fncSerchNodeで探しているノードが Node.Textとの比較でしか探していないのが原因でしょう

探すノードまでフルパスを検索してやれば希望通りになると思います
呼び出し側で 『階層5』を追加するための『階層4』ノードの検索に
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3 & "\" & strMenuName4)
と 階層1から階層4までを "\"でつないだ物をキーに探します

階層3を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3)

階層2を探すなら
fncSer...続きを読む


人気Q&Aランキング