WebとリンクしたKnowledge Baseを作成するには



Web上で公開しているAccess Know-how (FAQ&Tips)とリンクしたKnowledge Baseを作成する方法を解説します。今回紹介するアプリは、Visual Basic 6.0で提供されている、ActiveXコントロールを使用しますので、事前にインストールしておいてください。

  1. Access 2000を起動して新規データベース MyKB  を作成します。

  2. データベースウインドウのテーブルタブをクリックしたら新規作成のボタンをクリックして、tblTipstblTypeを作成します。テーブルを作成したらサンプルデータを入力します。


    図1-tblTipsを作成してサンプルデータを入力


     
    図2-tblTypeを作成してサンプルデータを入力


  3. ツールボックスからコントロールの選択アイコンをクリックします。ActiveXコントロールの一覧から、Microsoft TreeView Control, version 6.0をクリックしてフォームの左側に貼り付けます。同様の手順でMicrosoft ListView Control, version 6.0をクリックしてフォームの右上に貼り付けます。Microsoft Web Browserをクリックしてフォームの右中央に貼り付けます。。最後に、Microsoft ImageList Control, version 6.0 をクリックしてTreeViewコントロールの上に貼り付けます。




    図3-ActiveXコントロールの一覧リスト

    ActiveXコントロールを貼り付けたら、コントロール名をobjTreeViewobjListView、objImageType、objIEの名前に書き換えます。

    図4-フォームにTreeView、ListView、Web Browser、ImageListコントロールを貼り付けた例


  4. ImageListのコントロールをダブルクリックしてプロパティを表示させます。全般タブから 16 x 16 を選択してから、イメージタブをクリックしてテーブル(1-"Tables")、クエリ(2-"Queries")、フォーム(3-"Forms")、レポート(4-"Reports")、モジュール(5-"Modules")、チップ(6-"Tips")のイメージを登録します。イメージを登録するとき、インデックスキーを入力します。キーは、ダブルクオテーション(")で囲みます。全てのイメージを登録したら、OKをクリックしてプロパティを閉じます。


    図5-ImageListのプロパティにAccessのオブジェクトのアイコンを登録


  5. TreeViewコントロールをダブルクリックしてプロパティを表示させます。全般タブをクリックしたら、スタイル 7 - tvwTreelinesPlusMinusPictureText に設定します。線のスタイル 1- tvwRootLines に設定します。イメージリストobjImageTypeを設定します。最後にインデント幅300に設定したらOKボタンをクリックしてプロパティを閉じます。


    図6-TreeViewのプロパティを表示させて値を再設定する


  6. ListViewコントロールをダブルクリックして、プロパティを表示させます。ListViewのプロパティは、デフォルト値を使用しますので図7のようになっているか確認してOKボタンをクリックします。


    図7-ListViewのプロパティ


  7. フォームのプロパティを表示させて、読み込み時のイベントにリスト1Form_Loadのイベント処理をコピー&ペーストします。以下同様の手順で、フォームのイベント処理、TreeViewのイベント処理そしてListViewのイベント処理をコピー&ペーストします。最後にモジュールレベルのメモリ変数とサブルーチンをコピー&ペーストします。


    注)TreeViewとListViewコントロールのイベント登録は、VBE(Visual Basic Editor)を起動して、イベントのコンボボックスから選択します。


    リスト1-フォームの各種イベント処理とサブルーチン
    
    Option Compare Database
    Option Explicit
    
    ' #Const VIEW_MODE = "INTERNET"
    #Const VIEW_MODE = "INTRANET"
    
    Private mcnn As ADODB.Connection
    Private mrsTips As ADODB.Recordset
    Private mrsType As ADODB.Recordset
    Private mrstImages As ADODB.Recordset
    Private mobjListItems As ListItems
    
    ' ********************
    Private Sub Form_Load()
      Call OpenDatabaseConnection
      Call OpenTipsRecordset
      Call OpenTypeRecordset
      Call LoadListViewHeaders
      Call LoadListViewData
      Call LoadTreeView
    End Sub
    
    ' ************************************
    Private Sub Form_Unload(Cancel As Integer)
      Set mrsTips = Nothing
      Set mrsType = Nothing
    End Sub
    
    ' *************************
    Private Sub objListView_Click()
      objListView.SetFocus
    End Sub
    
    ' **********************************************************
    Private Sub objListView_ColumnClick(ByVal ColumnHeader As Object)
      Dim intCol As Integer
        
      intCol = ColumnHeader.Index - 1
      With objListView
        If (.SortKey = intCol) Then
          If .SortOrder = lvwAscending Then
            .SortOrder = lvwDescending
          Else
            .SortOrder = lvwAscending
          End If
        Else
          .SortKey = intCol
          .SortOrder = lvwAscending
        End If
        .Sorted = True
        .SelectedItem.EnsureVisible
      End With   
    End Sub
    
    ' ****************************
    Private Sub objListView_DblClick()
      With objListView
        Debug.Print Trim(.SelectedItem.Key) & " " & .SelectedItem
        #If VIEW_MODE = "ONLINE" Then
          Me!objIE.Navigate "http://www.friendlysw.com/knowhow/" & Trim(.SelectedItem.Key)
        #Else
          Me!objIE.Navigate "http://dellxps/knowhow/" & Trim(.SelectedItem.Key)
        #End If
      End With
    End Sub
    
    ' ***********************************************
    Private Sub objTreeView_Collapse(ByVal Node As Object)
        Call objTreeView_NodeClick(Node)
    End Sub
    
    ' **********************************************
    Private Sub objTreeView_Expand(ByVal Node As Object)
        Call objTreeView_NodeClick(Node)
    End Sub
    
    ' *************************************************
    Private Sub objTreeView_NodeClick(ByVal Node As Object)
      Dim strSQL As String
      
      mrsTips.Close
        
      If Node = "Tips" Then
        strSQL = "SELECT * FROM  tblTips"
      Else
        strSQL = "SELECT * FROM  tblTips WHERE TipType= '" & Node & "'"
      End If
      mrsTips.Open strSQL, mcnn, adOpenKeyset, adLockReadOnly
      Call LoadListViewData  
    End Sub
    
    ' *******************************
    Private Sub OpenDatabaseConnection()
      Set mcnn = New ADODB.Connection
      mcnn.ConnectionString = _
         "Provider=Microsoft.Jet.OLEDB.4.0; " & _
         "Data Source=" & CurrentProject.Connection
      mcnn.Open
    End Sub
    
    ' ***************************
    Private Sub OpenTipsRecordset()
      Dim strSQL As String
      
      strSQL = "SELECT tblTips.TipID, tblTips.TipType, tblTips.TipTitle," _
             & "tblTips.TipURL, tblTips.TipAdded, tblTips.TipUpdated" _
             & " FROM tblTips;"
    
      Set mrsTips = New ADODB.Recordset
      mrsTips.Open strSQL, mcnn, adOpenStatic, adLockOptimistic
    End Sub
    
    ' ***************************
    Private Sub OpenTypeRecordset()
      Dim strSQL As String
      
      strSQL = "SELECT tblType.TypeID, tblType.TypeName" _
             & " FROM tblType;"
             
      Set mrsType = New ADODB.Recordset
      mrsType.Open strSQL, mcnn, adOpenKeyset, adLockOptimistic
    End Sub
    
    ' **********************
    Private Sub LoadTreeView()
      Dim objTreeView As Control
      Dim objNode As Node
    
      Set objTreeView = Me.objTreeView
      Set objNode = objTreeView.Nodes.Add(, , "Tips", "Tips", 6)
    
      With mrsType
        .MoveFirst
        Do Until .EOF
            With objTreeView.Nodes
              Set objNode = .Add("Tips", tvwChild, , Trim(mrsType!TypeName), Int(mrsType!TypeID))
            End With
            .MoveNext
        Loop
      End With
    End Sub
    
    ' ****************************
    Private Sub LoadListViewHeaders()
    
      Dim objListItem As ListItem
    
      Set mobjListItems = Me.objListView.ListItems                   
      
      With Me.objListView
        .SmallIcons = objImageType.Object
        .View = lvwReport
        With .ColumnHeaders
          .Add , , "Title", 8500
          .Add , , "Added", 1000
          .Add , , "Updated", 1000
        End With
      End With    
    End Sub
    
    ' *************************
    Private Sub LoadListViewData()
    
      Dim objListItem As ListItem
    
      mobjListItems.Clear
    
      With mrsTips
        .MoveFirst  
        Do Until .EOF
            Set objListItem = mobjListItems.Add(, mrsTips!TipURL, mrsTips!TipTitle) 
            With objListItem
                .SubItems(1) = mrsTips!TipAdded
                .SubItems(2) = Nz(mrsTips!TipUpdated, " ")
                .SmallIcon = Chr(34) & mrsTips!TipType & Chr(34)
            End With
            .MoveNext
        Loop
      End With
    End Sub
                    
     


  8. フォームビューに切り替えたら、TreeViewからTipsをクリックします。Accessのオブジェクトタイプが表示されたら、Modulesをクリックします。図8のように、ListViewにモジュールに関連するTipの一覧が表示されます。ListViewからアイテムをダブルクリックすると、Web上に登録されているHTMLページを読み込んで、Web Browserコントロールに表示します。HTMLページのURLは、ListViewのSelectedItem.Keyプロパティから取得します。

    URLのプリフィックス(http://....)は、インターネット/イントラネット双方の環境で動作するように条件付コンパイラ定数で制御しています。

    Private Sub objListView_DblClick()
      With objListView
        Debug.Print Trim(.SelectedItem.Key) & " " & .SelectedItem
        #If VIEW_MODE = "INTERNET" Then
          Me!objIE.Navigate "http://www.friendlysw.com/knowhow/" & Trim(.SelectedItem.Key)
        #Else
          Me!objIE.Navigate "http://dellxps/knowhow/" & Trim(.SelectedItem.Key)
        #End If
      End With
    End Sub

     

    図8-ListViewからアイテムをダブルクリックしてWeb上のHTMLページを表示させた例


  9. フォームを frmTreeViewTip2 の名称で保存します。

 

Tip:
ListViewからアイテムをダブルクリックしても、Web BrowserにHTMLページが表示されないときは、Web Browserコントロールをカット&ペーストすると正常に表示されます。詳細は、 フォーム上にホームページを表示させるには を参照してください。