[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コネクションの存在確認で「実行時エラー '430': クラスはオートメーションをサポートしていないまたは必要なインターフェイスをサポートしていません」となる。』(AOTO)
EXCEL2003(サーバー・クライアントPC)
WindowsServer2008 R2
WindowsXP SP2(クライアントPC)
Microsoft .NET Framework 1.1
MDAC2.8 SP1(クライアントPC・サーバー上はバージョンの確認できず)
質問させて頂きます。
現在、WindowsServer2008上にて、VB.NET2003で作成したバッチ処理より、
あらかじめ用意してあるExcelテンプレートに処理結果を出力しています。
このテンプレートからはDB2(AS400)へアクセスできる様になっており、
Excelから編集した内容をADOを使用してアップロード出来るようになっています。
WindowsServer2008上で作成されたExcelを編集し、データの更新をする事は
出来るのですが、クライアントPC側からExcelを開き更新処理を行うと、
以下の構文のところで、
「実行時エラー '430': クラスはオートメーションをサポートしていないまたは
必要なインターフェイスをサポートしていません」
となり、アベンドしてしまいました。
If GcnAsConn.State Then ←ここ
GcnAsConn.Close End If
上記のエラーは何が原因で起きているのでしょうか?
ご教授頂ければ幸いです。
以上、宜しくお願いいたします。
「GcnAsConn」をどう宣言しているのかも載せるべきだと思いますが、 該当Excelファイルを開き、Visual Basic Editorの画面から「参照設定」にて ADOのバージョン確認、あるいは「参照不可」となっていないか。 まずはそれを確認する所からでしょうか。 まぁ、Google等で「ADO エラー 430」と検索するだけでも上記のような情報は出てきますが。 あとOKWaveでも質問されているようですが、問題が解決、あるいは状況に変化がある都度、 それぞれのサイトにて報告を行うようにして頂くのがよろしいかと思います。 面倒で大変でしょうが、質問した以上は放置する事のないよう。 (ご近所PG)
>「GcnAsConn」をどう宣言しているのかも載せるべきだと思いますが、
Public GcnAsConn As New ADODB.Connection
参照設定ですが、ADOのバージョンはクライアント側・サーバー側とも2.5となっており、
参照不可にはなっておりません。
その辺りの情報は、事前に調べるのが当たり前だと思いましたので、特に記述致しませんでした。
>まぁ、Google等で「ADO エラー 430」と検索するだけでも上記のような情報は出てきますが。
MDACのバージョン・DLLの差異等が検索でき、一通り作業実施してみましたが、
状況は変わらずでした。
ただ、MDACのバージョンがWinSV2008R2上ではチェッカーで確認しても、情報が出力されなかった為、
レジストリの方を確認したのですが、登録は存在していました。
>参照設定ですが、ADOのバージョンはクライアント側・サーバー側とも2.5となっており、 参照不可ではない、との事ですが……2.5ですか? MDAC 2.8が入っている事を確認していて、2.5を選択するのは何故でしょう。 2.8を選択した場合、どう動作するか確認してみるのも良いのでは。 あとはそもそも根本的に、サーバが生成したExcelファイル以外ではどうなるか。 クライアントPCで新規に生成して試してみるのも手でしょうし、 それこそExcelVBA以外の何かしらのツールなり言語なりからADO接続が成立するのか?等、 他の方向からの検証も試せるだけ試してみるのが良いかと思います。 そもそもStateプロパティだけの問題なのか。 それを無視すれば他は動作するのか。 念のためVBAのコンパイルは問題なく通るのか。 他の箇所での変なエラーのせいでADOはまったく関係ないのにそこで引っかかっている、 なんて可能性も捨てきれないでしょうから。 原因不明のエラー時には一つ一つ問題の可能性を潰していくと何かみえたりします。 >その辺りの情報は、事前に調べるのが当たり前だと思いましたので、 >特に記述致しませんでした。 事前に調べるのは当たり前なのは認識のとおりでしょうが、 それを「記述するのも当たり前」という認識の方が良いかと思います。 「ここまで調べた」という事を挙げておかないと、 この人はどこまで調べているのか? 参照設定を呼び出す方法を知っているのか? との不安から、VBEを立ち上げて云々と説明を加えたり等々、 今回のように双方で手間が増えてしまいます。 すみません、マルチポストは容認されているサイトなのですが、 個人的に良い印象を持っていないため、言葉にトゲがあるかもしれません。 (ご近所PG)
『VB初心者友の会』はマルチポスト絶対禁止だね。 >マルチポストがあった場合は、その記事すべてを削除します。 とあるからちゃんとマルチポストの報告して削除してもらったら? (マルチーズ)
マルチーズさんありがとうございます。 OKWaveはサイト内でのマルチ以外の外部サイトにおけるマルチはOKらしいので仕方ないと思いましたが…… VB初心者友の会というサイトまではチェックが及びませんでした。 しかもそちらでは魔界の仮面弁士さんが回答付けてくれてますね。頼もしい。 質問削除云々に関しては、私はそこまで求めはしませんので置いときます。 ただ、AOTOさんはご自身の手で、一度各サイトにおいて状況報告も兼ねつつ筋を通すのがよろしいかと。 で、多分この手のエラーは実際にその現象に立ち会わない限り、 「ズバリこれが駄目!」と言う明確な解は出てき難いかなと思います。 明確なミスがあれば指摘も出来るでしょうが、コードや環境など、全てを見られない状況では限界があります。 先にも書いたように、可能性を潰していく、まさにシラミ潰し、デバッグで解決して行くしかない気がします。 というわけで私の方からの回答は以上かしら、と。 (ご近所PG)
>MDAC 2.8が入っている事を確認していて、2.5を選択するのは何故でしょう。
特に理由はないですが、以前、他のシステムで使用していたものをベースに作成しましたので、
そのままになっていました。
クライアント側で作成したEXCELは、サーバー・クライアント側で問題なく動作しました。
サーバー側で作成したEXCELファイルも、一度クライアント側で参照設定を外し、
再設定することで現象が回避できました。
ADOの接続は、VB.NETで作成したアプリケーションでは問題なく接続できました。
また、2.8で検証する前に原因が分かりましたのでご報告いたします。
原因は、WindowsServer2008 R2、Windows7 SP1から、ADOのバージョンが変わってしまい、
Excelの参照設定上はADO2.5がサーバー上とクライアント側で変わりは無いのですが、レジストリの
DetaAccessのバージョンを見ると、WinSV2008とXPで差異がありこれが原因でした。
http://www.cs-dotnet.com/2011/03/win7-sp1-breaking-changes.html
回避方法はいくつかあるようですが、クライアント側のPCのOSをWin7にバージョンアップするという
話も出てきた為、環境面も含めて対応策を考えて行きたいと思います。
皆様から、いろいろなご意見頂きありがとうございました。
解法が見つかったようで何よりです。 この後追記されるかも知れませんが、OKWaveなどで回答が付いていなかったとしても、 情報を追記しておくのが良いかと思います。 誰かが同じ事象で困っていてそのページに辿り着いた時、参考になるように。 バージョンの差異による問題という事で、既に他サイトでも記述がありますが
> もしも ADO のバージョンを合わせられない場合は、レイトバインドに > 切り替えることで、一部の問題を軽減できる可能性があります これも良い手法だと思います。遅延バインディングとも言われます。 要は事前に参照設定せず、ADODB.Connection等、ADOに関する物を全てObjectで宣言にしておいて、 後からCreateObjectで生成する、って形です。 色々調べてみてください。 (ご近所PG)
>とあるからちゃんとマルチポストの報告して削除してもらったら? はAOTO氏に対してのセリフだったんだがAOTO氏は『ばれなきゃいいや』ってことで『VB初心者友の会』には ルールを破ったことの報告も謝罪もする気は無いみたいだな。
#もしかして誰かが向こうに報告してくれるのを待つ誘い受けか? (マルチーズ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.