DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MDBファイルのDataGridViewに表示にて

環境/言語:[Win XP(HE) VB2005]
分類:[.NET]

いつも参考にさせていただいております。
この度、Microsoft Accessのファイル(.mdb)を表示する
簡単なアプリを作成することになりまして、以下のコードにて
作成いたしましたが、「データセットにデータを取得」のところで

--------------------------------------------------------------------
ファイルまたはアセンブリ 'System.EnterpriseServices.Wrapper.dll'、
またはその依存関係の 1 つが読み込めませんでした。指定されたファイル
が見つかりません。
--------------------------------------------------------------------

と例外がでるPCとでないPCが発生いたしました。
例外の出るPCは一台でそのPCのみがWindowsXP HomeEditionでした。
その他の違いは見つけられませんでしたが、何かのファイルが足りないのでしょうか?

エラーメッセージは上記の通りですが、System.EnterpriseServices.Wrapper.dll
とはどのようなものでしょうか?
Web検索などをしてみましたが良くわかりませんでした。
ご存知の方が折られましたら、ご教授お願いいたします。

以下コード----------------------------------------------------------

Imports System.Data.OleDb

Public Class Form1

    Dim TabControl1 As TabControl      'タブコントロール
    Dim dgv() As DataGridView          'データグリッドビュー

    Private Sub Form1_Load(ByVal sender As Object, _
                                ByVal e As System.EventArgs) Handles Me.Load
        'タブコントロールを作成
        TabControl1 = New System.Windows.Forms.TabControl
        TabControl1.Name = "TabControl1"
        TabControl1.Multiline = True
        Controls.Add(TabControl1)
        TabControl1.BringToFront()
        TabControl1.Dock = DockStyle.Fill
    End Sub

    ''' <summary>
    ''' MDBファイルからテーブルの一覧をArrayListで取得
    ''' </summary>
    ''' <param name="MDBFileName">MDBファイルのパス</param>
    ''' <returns>テーブル名のArrayList</returns>
    ''' <remarks></remarks>
    Private Function GetTables(ByVal MDBFileName As String) As ArrayList

        GetTables = New ArrayList

        ' ADOのオブジェクト変数を宣言する
        Dim cnn As New ADODB.Connection
        Dim rec As New ADODB.Recordset
        ' MDB を定義する
        Dim dbNAME As String

        Dim cnt As Integer

        ' 変数の定義
        dbNAME = MDBFileName 'MDB 名を入力

        ' ADOX を定義する
        Dim cat As New ADOX.Catalog
        Dim cat_tbl As ADOX.Table

        ' ADO 接続処理
        cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" _
                            & "Data Source=" & dbNAME & ";")

        ' ADOX 接続処理
        cat = New ADOX.Catalog
        cat.ActiveConnection = cnn

        cnt = 0

        '// テーブルコレクション内をループする
        For Each cat_tbl In cat.Tables
            If cat_tbl.Type = "TABLE" Then
                GetTables.Add(cat_tbl.Name)
                cnt = cnt + 1
            End If
        Next

        'テーブが無かったときの処理
        If cnt = 0 Then
            MsgBox("テーブルがありません。")
            Exit Function
        End If

        ' 終了処理
        cat = Nothing
        cnn.Close()
        cnn = Nothing
    End Function

    Private Sub OpenMDB(ByVal MDBFileName As String)
        '変数の宣言()
        Dim tb As String    'テーブル名
        Dim TbArray As New ArrayList    'テーブル名の配列
        Dim OleCn As OleDbConnection = New OleDbConnection()
        Dim OleDA As OleDbDataAdapter
        Dim dtSet As DataSet
        Dim tp(0) As TabPage            'タブページ

        Dim i As Integer

        If MDBFileName <> "" Then

            '初期化
            If TabControl1.TabPages.Count > 0 Then

                For Each t As TabPage In TabControl1.TabPages
                    t.Dispose()
                Next

            End If

            'テーブルの取得
            TbArray = GetTables(MDBFileName)
            '接続文字列の作成
            OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                        + "Data Source=" & MDBFileName & ";" _
                                        + "Persist Security Info=false"

            For Each tb In TbArray

                If InStr(tb, "$") = 0 Then

                    'データを取得するためのSQL文を作成する
                    Dim strSQL As String = "SELECT * FROM " & tb
                    OleDA = New OleDbDataAdapter(strSQL, OleCn)

                    dtSet = New DataSet(tb)

                    'データセットにデータを取得する
                    OleDA.Fill(dtSet, tb)

                    'コントロールの追加
                    ReDim Preserve tp(i)
                    ReDim Preserve dgv(i)

                    tp(i) = New TabPage
                    tp(i).Text = TbArray(i)
                    tp(i).Tag = i
                    TabControl1.TabPages.Add(tp(i))

                    dgv(i) = New DataGridView
                    dgv(i).Tag = i

                    dgv(i).Dock = DockStyle.Fill
                    'dataGridViewにデータを表示する
                    dgv(i).DataSource = dtSet.Tables(0)

                    tp(i).Controls.Add(dgv(i))

                End If
                i += 1
            Next

        End If
    End Sub

    Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, _
                        ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click
        Dim ofd As New OpenFileDialog   'OpenFileDialog
        ofd.Filter = "アクセスファイル(*.mdb)|*.mdb"
        If ofd.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            Call OpenMDB(ofd.FileName)
        End If
    End Sub

    Private Sub CloseToolStripMenuItem_Click(ByVal sender As System.Object, _
                        ByVal e As System.EventArgs) Handles CloseToolStripMenuItem.Click
        Me.Close()
    End Sub

End Class

---------------------------------------------------------------------------
Windows UPDate をしたら直りました。
お騒がせいたしました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板