質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

2回答

15840閲覧

Accessのデータを取得することができない

Re-ka

総合スコア6

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

1グッド

1クリップ

投稿2018/08/02 01:37

前提・実現したいこと

VBでデータベースを使い、問題文を表示させて、四つのボタンに答えを書いてありその一つ選ぶクイズ?のようなものを作成しています。
そして、Accessに接続できない?のかデータを取得することができずにエラーが発生しました。

発生している問題・エラーメッセージ

OleDbExceptionはハンドルされませんでした。 型 'System.Data.OleDb.OleDbException' のハンドルされていない例外が System.Data.dll で発生しました 追加情報:インストール可能な ISAM ドライバーが見つかりませんでした。

該当のソースコード

VB.NET

1ソースコード 2 Dim patern As Integer 3 Dim OleConn As OleDb.OleDbConnection = New OleDb.OleDbConnection 4 Dim OleDA As OleDb.OleDbDataAdapter 5 Dim detSet As DataSet = New DataSet("test1") 6 Dim dtTable As DataTable 7 Dim dtRow As DataRow 8 Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 9 OleConn.ConnectionString = 10 "Provider=Microsoft.ACE.OLEDB.12.0; " & ";" & 11 "Date Source = ファイル名" & ";" & 12 "Perist Security Info=False" 13 14 OleDA = New OleDb.OleDbDataAdapter("SELECT * FROM test1", OleConn) 15 16 OleDA.Fill(detSet, "test1") 'ここで止まりエラー文が表示された 17 dtTable = detSet.Tables("test1") 18 19

補足情報(FW/ツールのバージョンなど)

Visual Studio 2015
Access 2016

ItSANgo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以前 MSDN Forum でそのエラーメッセージ「インストール可能な ISAM ドライバーが見つかりませんでした。」の事例がありました。

インストール可能な ISAM ドライバが見つかりませんでした。が実行時出力される。
https://social.msdn.microsoft.com/Forums/netframework/ja-JP/90a2a9bf-7c17-4243-a66d-c65f27b30262/124521253112473124881254012523214873302112394-isam?forum=aspnetja

原因は接続文字列の間違い(上の事例では Data と Source の間に半角スペースがない)でした。

質問に書かれた接続文字列はそこのところは問題ないようですが、syameimaru さんが指摘された所が間違っているようです。それを直したらどうなったのでしょうか?

ちなみに自分の環境では、Visual Studio のサーバーエクスプローラーで Access に接続したときに自動生成された以下の接続文字列で Access への接続もデータの取得も問題なしです。(コードは C# です)

using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"C:\Users\surfe\Documents\...\Northwind2007.accdb\"";

ACE プロバイダが 32-bit 版なら以下の記事の画像のように Visual Studio から接続できますので試してみてはいかがでしょう?

Access 2007 の DB を利用するアプリ開発
http://surferonwww.info/BlogEngine/post/2011/11/08/Development-of-application-which-uses-accdb-file-of-Access-2007.aspx

上記の記事にも書いてありますが、2010, 2013 用のプロバイダには 32/64-bit 版の両方があります(2007 用は 32-bit のみ)。Visual Studio は 32-bit ですので、プロバイダに 64-bit 版を使うと、記事に書いたような Visual Studio の Access DB への接続はできませんので注意してください。

質門者さんの開発マシンに 64-bit 版の Office をインストールしたとすると ACE プロバイダも 64-bit 版が一緒にインストールされていると思います。

32/64-bit 版の ACE は同じ PC に共存できないので(裏技的方法はあるようですがあくまで裏技)、開発マシンで上に紹介した記事のように Visual Studio を Access に接続したい場合は、64-bit 版 ACE はアンインストールし、32-bit 版を入手してインストールしてください。

なお、開発するアプリのプラットフォームターゲット、アプリを使用する PC の OS の 32/64-bit、ACE プロバイダの 32/64-bit には注意してください。不整合があるとアプリが動きません。

最後に、

OleConn.Open() と加えた結果

の件ですが、OleDbDataAdapter で DataTable を Fill する場合、接続の open / close は自動的に OleDbDataAdapter が行ってくれますので、必要ありません。

プログラマが open / close を書くのは、他のクエリとトランザクションに束ねたいので、先に開いた接続を使いたいというような場合のみです。

投稿2018/08/12 05:27

編集2018/08/12 05:29
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

OleConn をOpenしていない気がします。

VB

1OleConn.Open() 2OleDA = New OleDb.OleDbDataAdapter("SELECT * FROM test1", OleConn) 3OleDA.Fill(detSet, "test1") 4dtTable = detSet.Tables("test1")

この順番でやってみてください

追記
また、

VB

1 "Provider=Microsoft.ACE.OLEDB.12.0; " & ";" &

の部分ですが、たぶん ";" & はいらないかと思います。


私の環境だと

VB

1Dim strPro as string = "Microsoft.ACE.OLEDB.12.0" 2Dim strASRC as string = "ファイル名" 3Dim strSQL As String = Nothing 4 5OleConn.ConnectionString = "Provider=" & strPro & ";" & 6 "Data Source=" & strASRC & ";" & 7 "Persist Security Info=False;" 8 9strSQL = "Select * from " & TBL'TBLはAccessのテーブル名 10 11OleConn.Open() 12 13OleDA = New OleDb.OleDbDataAdapter(strSQL, OleConn) 14 15OleDA.Fill(detSet, TBL)

で動作しました。

投稿2018/08/02 01:54

編集2018/08/02 02:16
syameimaru

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Re-ka

2018/08/02 02:18

OleConn.Open() と加えた結果、今度はそこが同じエラー文がでてしまいました。この場合はどうすればいいのでしょうか? "Provider=Microsoft.ACE.OLEDB.12.0; __の部分いらないですね!見落としてました。ありがとうございます
syameimaru

2018/08/02 02:26 編集

Persist Security Info=False;←の;はついていますか? Dim detSet As DataSet = New DataSetとしても同じエラーが出ますでしょうか?
Re-ka

2018/08/02 02:30

はい、同じエラー文が出ます
syameimaru

2018/08/02 02:58 編集

私も以前別の原因ではあるのですが、Accessとの接続が上手くできず、 Microsoft.Jet.OLEDB.4.0を使用し、Accessは.mdbを利用することで解決できました。 その際、ビルドの構成マネージャーのプラットフォームはx86にしました。
Re-ka

2018/08/06 03:36

サイトをもとに弄ってみたのですが、やはり動きません。 ダウンロードもプラットホームもできてはいると思うのですが……。如何すればいいでしょう? エラー文は同じところで出ます
syameimaru

2018/08/06 05:17 編集

一度接続文字列を確認したいので、ブレークポイント等で止めて実際に作られた接続文字列を送ってください。 追加:Provider=Microsoft.ACE.OLEDB.16.0ではだめでしたでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問