sql >> データベース >  >> RDS >> Access

サブフォームを使用したTreeViewコントロール

    はじめに。

    TreeViewコントロールチュートリアルのこのセッションでは、メインフォーム frmTreeViewtabのTreeViewコントロールとともに2つのサブフォームを使用します。 。以前のデモプロジェクトからプリロードされた画像を含むImageListコントロールをインポートしました。
    同じlvCategoryを使用します およびlvProducts 以前のプロジェクトで使用したテーブル
    lvCategory テーブルの主キー フィールド(CID)と説明フィールド(カテゴリ)の値は、TreeView Nodes Add()メソッドの Key およびテキスト それぞれパラメータ値。 lvProducts 表には、製品コード、説明在庫単位数量、定価など、各製品の詳細情報があります。

    それに加えて、 lvProducts テーブルにはParentIDがあります カテゴリコード(CID)値で更新されたフィールド。特定のカテゴリに属する​​すべての製品アイテムは、ParentIDフィールドの(カテゴリID)CIDフィールド値で更新されます。このようにして、両方のテーブルにマスターと子の関係があります。

    製品レコードには、タブコントロールページに2つのサブフォームがあります。最初のページにはデータ表示があります サブフォームと2番目のページには編集があります サブフォーム。最初のタブコントロールページには、TreeViewコントロールの特定のカテゴリに属する​​すべての製品レコードが表示されます。最初のサブフォームレコードは、2番目のサブフォームで編集するために特定のレコードを表示および選択するために表示されます。

    現在 記録またはユーザーが選択 最初のサブフォームのレコードは、タブコントロールの2番目のページにある2番目のサブフォームで編集できます 灰色で強調表示されているキーフィールドはロックされており、編集できません。

    サブフォームデザインビューを備えたTreeView。

    フォームのデザインビューfrmTreeViewTab 以下に示します:

    メインフォームの最初の2つのバインドされていないテキストボックスは、ユーザーがTreeViewコントロールからCategoryアイテムを選択すると更新されます。

    3番目のバインドされていないテキストボックス(名前p_ID)は、最初に最初の製品レコードの一意のID(PID)値で更新されます。それ以外の場合は、ユーザーが選択したレコードの値が更新されます。最初のサブフォームで選択した製品レコードは、2番目のサブフォームで変更できます。

    以前のチュートリアルセッションへのリンク。

    以前のチュートリアルセッションリンクは、すぐに参照できるように以下に示されています。

    1. MicrosoftTreeViewControlチュートリアル
    2. TreeViewコントロールを使用したアクセスメニューの作成
    3. TreeViewコントロールへの画像の割り当て
    4. TreeViewControl-2への画像の割り当て
    5. TreeViewコントロールのチェックマーク-削除ノードの追加
    6. TreeViewImageComboドロップダウンアクセスメニュー
    7. ドラッグアンドドロップでTreeViewノードを再配置
    8. MS-AccessTreeViewを使用したListViewコントロール
    9. ListViewコントロールのドラッグドロップイベント

    CatId バインドされていないテキストボックスは[リンクマスターフィールド] 最初のサブフォームのプロパティ値。

    3番目のバインドされていないテキストボックスの製品コード( p_ID )は[リンクマスターフィールド]にリンクされています 表示の2番目のサブフォームのプロパティ値 タブページ。

    p_ID バインドされていないテキストボックスの値は、最初のサブフォームの内容が更新されたとき、またはユーザーがアイテムを選択したときに更新されます。

    画面の通常の表示。

    frmTreeViewTabの通常のビュー フォームは以下のとおりです:


    2番目のサブフォームの製品レコードのキーフィールド(前色は灰色)はロックされており、コンテンツを変更することはできません。

    フォームfrmTreeViewTab クラスモジュールVBAコード:

    Option Compare Database
    Option Explicit
    
    Dim tv As MSComctlLib.TreeView
    Dim imgList As MSComctlLib.ImageList
    Const Prfx As String = "X"
    
    Private Sub Form_Load()
    Dim db As DAO.Database
    Dim tbldef As TableDef
    
    'Initialize TreeView Nodes
        Set tv = Me.TreeView0.Object
        tv.Nodes.Clear
    'Initialixe ImageList Object
        Set imgList = Me.ImageList3.Object
        
    'Modify TreeView Font Properties
    With tv
        .Font.Size = 9
        .Font.Name = "Verdana"
        .ImageList = imgList 'assign preloaded imagelist control
     End With
        
       LoadTreeView 'Create TreeView Nodes
    
    End Sub
    
    Private Sub LoadTreeView()
        Dim Nod As MSComctlLib.Node
        Dim strCategory As String
        Dim strCatKey As String
        Dim strProduct As String
        Dim strPKey As String
        Dim strBelongsTo As String
        Dim strSQL As String
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        
        'Initialize treeview nodes
         tv.Nodes.Clear
        
        strSQL = "SELECT lvCategory.CID, lvCategory.Category, "
        strSQL = strSQL & "lvcategory.BelongsTo FROM lvCategory ORDER BY lvCategory.CID;"
        
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
    
        ' Populate all Records as Rootlevel Nodes
        Do While Not rst.BOF And Not rst.EOF
            If rst.AbsolutePosition = 1 Then
               Me![CatID] = rst![CID]
            End If
                strCatKey = Prfx & CStr(rst!CID)
                strCategory = rst!Category
                
                Set Nod = tv.Nodes.Add(, , strCatKey, strCategory, 1, 2)
                Nod.Tag = rst!CID
            rst.MoveNext
        Loop
        
        'In the second pass of the the same set of records
        'Move Child Nodes under their Parent Nodes
        rst.MoveFirst
        Do While Not rst.BOF And Not rst.EOF
            strBelongsTo = Nz(rst!BelongsTo, "")
            If Len(strBelongsTo) > 0 Then
                strCatKey = Prfx & CStr(rst!CID)
                strBelongsTo = Prfx & strBelongsTo
                strCategory = rst!Category
                
                Set tv.Nodes.Item(strCatKey).Parent = tv.Nodes.Item(strBelongsTo)
            End If
            rst.MoveNext
        Loop
        rst.Close
        
    
        TreeView0_NodeClick tv.Nodes.Item(1)
        
    End Sub
    
    Private Sub TreeView0_NodeClick(ByVal Node As Object)
    Dim Cat_ID As String
    
    'Initialize hidden unbound textbox 'Link Master Field' values
    Cat_ID = Node.Tag
    Me!CatID = Cat_ID
    Me![xCategory] = Node.Text
    
    End Sub
    
    Private Sub cmdExit_Click()
        DoCmd.Close
    End Sub
    
    
    

    TreeViewControlとImageListControlの使用法とその機能はすべて以前のセッションで詳細に説明されていたため、上記のフォームモジュールに表示される以前のVBAサブルーチンはごくわずかです。

    これまでに、MS-Access TreeView、ListView、ImageList、およびImageCombo Controlを使用していくつかの画面を設計してきましたが、これらが独自のプロジェクトインターフェイス設計の優れた参照ポイントとして見つかることを願っています。

    TreeViewコントロールのMS-Officeバージョンの問題。

    ご使用のバージョンのMicrosoftAccessでデモデータベースを実行する際に問題が発生した場合は、次のリンクを参照して、問題の解決に役立つ可能性のある修正アクションを確認してください。

    以前は、上記のコントロールは64ビットシステムでは実行されていませんでした。ただし、2017年9月に、MicrosoftはMSCOMCTL.OCXライブラリの更新を発表しました。参考までに、Microsoftドキュメントの次の抜粋を以下に示します。

    2017 Update:1707ドキュメントの全文については、上記のドキュメント画像をクリックしてください。次のリンクは、いくつかの役立つヒントを示しています。
    • 解決済みのMSCOMCTL.OCXダウンロードレジスタ64ビットウィンドウ

    上記のTreeViewコントロールオブジェクトを使用すると、新しいプロジェクトの見栄えが良く、パフォーマンスの高いユーザーインターフェイスを構築できます。

    デモデータベースをダウンロードします。



    1. PostgreSQLメルトダウンベンチマーク

    2. SQLキーワードのように見えるSQL列名を処理するにはどうすればよいですか?

    3. ユーザーごとに最新の日付の行を選択します

    4. T-SQLで日付順に並べ替える方法