いつも参考にさせていただいております。
この度、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
---------------------------------------------------------------------------
分類:[.NET]