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

ファイルダイアログについて

環境/言語:[Windows7 VB.NET 2010 Framework4]
分類:[.NET]

こんにちは。ファイルダイアログの扱いで困っており投稿しました。
よろしくお願いします。

ファイルダイアログからファイルを選択してファイル名を取得する処理を作成しています。途中でメモリエラーが出てしまいます。

処理は下記URLのサンプルを利用しています。
http://dobon.net/vb/dotnet/form/openfiledialog.html

デバックで確認した所、「ofd.ShowDialog() = DialogResult.OK」でaccessviolationexceptionエラーが出ていました。
実行アプリはWindowsXPとWindows7で確認しましたが、現象が発生するのはWindows7のみでした。


環境
Windows7
VB.NET2010
Framework4.0
新しく作成したプロジェクトで必要最小限のコードだけ書き写しても同じ現象が起きるのでしょうか?
もし、それでも AccessViolationException が発生するのであれば、すでにインストールされているプログラムの何かが悪さをしているのかもしれません。
この場合、そのプログラムを削除するしか解決策はないかもしれません。

可能であれば、ほかのマシンでも試してみてください。
(同じ OS でできるだけクリーンな環境など)
こまかいことですが・・

>デバックで確認した所

「デバッグ」というのが一般的表記です
返信ありがとうございます。

■No27883に返信(Azuleanさんの記事)
> 新しく作成したプロジェクトで必要最小限のコードだけ書き写しても同じ現象が>起きるのでしょうか?
> もし、それでも AccessViolationException が発生するのであれば、すでにインストールされているプログラムの何かが悪さをしているのかもしれません。
> この場合、そのプログラムを削除するしか解決策はないかもしれません。

 → 置きませんでした。同じプロジェクトでも呼び出すフォームによっては
   置きませんでした。

> 可能であれば、ほかのマシンでも試してみてください。
> (同じ OS でできるだけクリーンな環境など)

 → ライセンスの都合ですぐにはできないですが、確認してみます。


■No27893に返信(Debugさんの記事)
> こまかいことですが・・
>
> >デバックで確認した所
>
> 「デバッグ」というのが一般的表記です

→ ご指摘ありがとうございます。お恥ずかしい限りです。
■No27900に返信(みけんにしわさんの記事)
>  → 置きませんでした。同じプロジェクトでも呼び出すフォームによっては
>    置きませんでした。

それでは、その起きるフォームと起きないフォームの違いは何かを調べるところからでしょうか。
正直なところ、大抵はこれという一般解はないと思いますので、ご自身で調べて頂くしかありません。

第三者に頼るには、起きる・起きないの違いを見せるか、再現させるための何かを提示する必要があります。
返信ありがとうございます。

確かめたパターン的には下記な感じです。
やりたい事はNGパターンの場合です。

NG:メインフォーム → ダイアログフォーム → ファイルダイアログ
OK:メインフォーム → ファイルダイアログ


以上

■No27902に返信(Azuleanさんの記事)
> ■No27900に返信(みけんにしわさんの記事)
>> → 置きませんでした。同じプロジェクトでも呼び出すフォームによっては
>>   置きませんでした。
>
> それでは、その起きるフォームと起きないフォームの違いは何かを調べるところからでしょうか。
> 正直なところ、大抵はこれという一般解はないと思いますので、ご自身で調べて頂くしかありません。
>
> 第三者に頼るには、起きる・起きないの違いを見せるか、再現させるための何かを提示する必要があります。
追記します。

どちらのパターンもファイルダイアログを呼び出す関数は
publicのモジュールに書いた関数を呼び出し同じ処理を使用しています。

思いつく相違点は
1.ダイアログフォームの「formBoderstyle」が「FixedDialog」
2.各フォームの呼び出しで
 ・メインフォームは「Application.Run」で表示
 ・メインフォームよりボタンのイベントから「showDialog」で表示


■No27905に返信(みけんにしわさんの記事)
> 返信ありがとうございます。
>
> 確かめたパターン的には下記な感じです。
> やりたい事はNGパターンの場合です。
>
> NG:メインフォーム → ダイアログフォーム → ファイルダイアログ
> OK:メインフォーム → ファイルダイアログ
>
>
> 以上
>
> ■No27902に返信(Azuleanさんの記事)
>>■No27900に返信(みけんにしわさんの記事)
> >> → 置きませんでした。同じプロジェクトでも呼び出すフォームによっては
> >>   置きませんでした。
>>
>>それでは、その起きるフォームと起きないフォームの違いは何かを調べるところからでしょうか。
>>正直なところ、大抵はこれという一般解はないと思いますので、ご自身で調べて頂くしかありません。
>>
>>第三者に頼るには、起きる・起きないの違いを見せるか、再現させるための何かを提示する必要があります。
確認ですが、その「思いついた相違点」(特異点)だけを再現した新しいフォームでは現象が起きるのでしょうか?
今現象が起きているプロジェクトでの再現性を確認し、また、新しいプロジェクトでの再現性を確認してください。


(1)同じプロジェクトであれば、その特異点を満たせば再現する・しない。
(2)新しく作ったプロジェクトで、その特異点を満たせば再現する・しない。


(2)が「再現しない」のであれば、第三者は調査ができません。
私が「違いを示すべきだ」といったのは、第三者から推測可能な情報を示すことですが、今回の情報ではその推測はできないとみています。
(その違いだけでは起こせないはずであるため)

ご自身で(1)や(2)の再現方法を試して原因を自分で推測し、試して、絞り込んでいく過程で解決策を見つけるか、(2)で「再現する」という状態に持って行き、開示するかが必要でしょう。
返信ありがとうございます。


> (1)同じプロジェクトであれば、その特異点を満たせば再現する・しない。
> (2)新しく作ったプロジェクトで、その特異点を満たせば再現する・しない。
>
>
> (2)が「再現しない」のであれば、第三者は調査ができません。
> 私が「違いを示すべきだ」といったのは、第三者から推測可能な情報を示すことですが、今回の情報ではその推測はできないとみています。
> (その違いだけでは起こせないはずであるため)
>
> ご自身で(1)や(2)の再現方法を試して原因を自分で推測し、試して、絞り込んでいく過程で解決策を見つけるか、(2)で「再現する」という状態に持って行き、開示するかが必要でしょう。


(2)では再現しませんでした。

(1)でも同じ条件でプロジェクト内の処理上、関係ないフォームのコントロールを消したら行けたりと挙動的に調査が難しいので、自分で絞り込んでいこうかと思います。
あけましておめでとうございます。

年末年始で、ごろごろしておりました。


今回の件で、確認していったところ。

他のフォームに使用していた、WindowsMediaPlayerのコントロールをはずすと
うまく動作するようになりました。
ただ、他のプロジェクトで同様の事をしても再現しないので、
WindowsMediaPlayerのみが原因ではないと思います。


正直なぜかはわかりませんが。。。



■No27916に返信(みけんにしわさんの記事)
> 返信ありがとうございます。
>
>
>>(1)同じプロジェクトであれば、その特異点を満たせば再現する・しない。
>>(2)新しく作ったプロジェクトで、その特異点を満たせば再現する・しない。
>>
>>
>>(2)が「再現しない」のであれば、第三者は調査ができません。
>>私が「違いを示すべきだ」といったのは、第三者から推測可能な情報を示すことですが、今回の情報ではその推測はできないとみています。
>>(その違いだけでは起こせないはずであるため)
>>
>>ご自身で(1)や(2)の再現方法を試して原因を自分で推測し、試して、絞り込んでいく過程で解決策を見つけるか、(2)で「再現する」という状態に持って行き、開示するかが必要でしょう。
>
>
> (2)では再現しませんでした。
>
> (1)でも同じ条件でプロジェクト内の処理上、関係ないフォームのコントロールを消したら行けたりと挙動的に調査が難しいので、自分で絞り込んでいこうかと思います。
>
長い間、報告なくもうしわけありません。

原因?とまで言えるかわかりませんが。

アクセス(accdb)のファイルへアクセスする処理を通ると起きるようです。
open、closeだけでもエラーがでてしまいます。

メモリを解放できてないのでしょうか?

Providerは「Microsoft.ACE.OLEDB.12.0」を使用し
OleDbConnectionを使用して

接続は
 Open
解放時は
 close → Dispose → 使用変数にNothingを代入
を行っています。

解放に問題がありますでしょうか?
また、なぜエラーになるかの調査方法などありますでしょうか?

以上、よろしくおねがいします。





■No27953に返信(みけんにしわさんの記事)
> あけましておめでとうございます。
>
> 年末年始で、ごろごろしておりました。
>
>
> 今回の件で、確認していったところ。
>
> 他のフォームに使用していた、WindowsMediaPlayerのコントロールをはずすと
> うまく動作するようになりました。
> ただ、他のプロジェクトで同様の事をしても再現しないので、
> WindowsMediaPlayerのみが原因ではないと思います。
>
>
> 正直なぜかはわかりませんが。。。
>
>
>
> ■No27916に返信(みけんにしわさんの記事)
>>返信ありがとうございます。
>>
>>
> >>(1)同じプロジェクトであれば、その特異点を満たせば再現する・しない。
> >>(2)新しく作ったプロジェクトで、その特異点を満たせば再現する・しない。
> >>
> >>
> >>(2)が「再現しない」のであれば、第三者は調査ができません。
> >>私が「違いを示すべきだ」といったのは、第三者から推測可能な情報を示すことですが、今回の情報ではその推測はできないとみています。
> >>(その違いだけでは起こせないはずであるため)
> >>
> >>ご自身で(1)や(2)の再現方法を試して原因を自分で推測し、試して、絞り込んでいく過程で解決策を見つけるか、(2)で「再現する」という状態に持って行き、開示するかが必要でしょう。
>>
>>
>>(2)では再現しませんでした。
>>
>>(1)でも同じ条件でプロジェクト内の処理上、関係ないフォームのコントロールを消したら行けたりと挙動的に調査が難しいので、自分で絞り込んでいこうかと思います。
>>
解決?にしていいのか不明ですが。
以下のコンポーネントをインストールすることにより解決しました。

2007 Office system ドライバ: データ接続コンポーネント
http://www.microsoft.com/downloads/details.aspx?FamilyId=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=ja


■No28066に返信(みけんにしわさんの記事)
> 長い間、報告なくもうしわけありません。
>
> 原因?とまで言えるかわかりませんが。
>
> アクセス(accdb)のファイルへアクセスする処理を通ると起きるようです。
> open、closeだけでもエラーがでてしまいます。
>
> メモリを解放できてないのでしょうか?
>
> Providerは「Microsoft.ACE.OLEDB.12.0」を使用し
> OleDbConnectionを使用して
>
> 接続は
>  Open
> 解放時は
>  close → Dispose → 使用変数にNothingを代入
> を行っています。
>
> 解放に問題がありますでしょうか?
> また、なぜエラーになるかの調査方法などありますでしょうか?
>
> 以上、よろしくおねがいします。
>
>
>
>
>
> ■No27953に返信(みけんにしわさんの記事)
>>あけましておめでとうございます。
>>
>>年末年始で、ごろごろしておりました。
>>
>>
>>今回の件で、確認していったところ。
>>
>>他のフォームに使用していた、WindowsMediaPlayerのコントロールをはずすと
>>うまく動作するようになりました。
>>ただ、他のプロジェクトで同様の事をしても再現しないので、
>>WindowsMediaPlayerのみが原因ではないと思います。
>>
>>
>>正直なぜかはわかりませんが。。。
>>
>>
>>
>>■No27916に返信(みけんにしわさんの記事)
> >>返信ありがとうございます。
> >>
> >>
>>>>(1)同じプロジェクトであれば、その特異点を満たせば再現する・しない。
>>>>(2)新しく作ったプロジェクトで、その特異点を満たせば再現する・しない。
>>>>
>>>>
>>>>(2)が「再現しない」のであれば、第三者は調査ができません。
>>>>私が「違いを示すべきだ」といったのは、第三者から推測可能な情報を示すことですが、今回の情報ではその推測はできないとみています。
>>>>(その違いだけでは起こせないはずであるため)
>>>>
>>>>ご自身で(1)や(2)の再現方法を試して原因を自分で推測し、試して、絞り込んでいく過程で解決策を見つけるか、(2)で「再現する」という状態に持って行き、開示するかが必要でしょう。
> >>
> >>
> >>(2)では再現しませんでした。
> >>
> >>(1)でも同じ条件でプロジェクト内の処理上、関係ないフォームのコントロールを消したら行けたりと挙動的に調査が難しいので、自分で絞り込んでいこうかと思います。
> >>
解決済み!
■No28072に返信(みけんにしわさんの記事)

このスレッドに助けられました。ヽ(・ω・)ノ
やや前のスレッドで解決済みとなっていますが、ちょこっと追記というか報告ということで。


全く同じではありませんが、ほぼ同じ現象に遭遇しました。
このスレッドはリアルタイムで見ていたのですが、当初は異なる現象だと思っていたため試すのが遅れたりして――

結論としては、みけんにしわ さんと同じ方法で収束しました。助かりました。


失敗談として、紹介されている

> 2007 Office system ドライバ: データ接続コンポーネント
> http://www.microsoft.com/downloads/details.aspx?FamilyId=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=ja

ではなく、

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント

を間違って入れてしまったり。Σ(・ω・`)
違うものですから解決しないで当然なのですが。

インストーラのファイル名が全く同じだったため、対応 Office のバージョンが上がって名前も変わったのかなとか…
そんなミスする人いないかもしれません;;


とまれ、この手段で解決するケースが他にもありましたという報告と、お礼までに。
解決済み!

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