tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: アプリケーションのコンポーネントで…例外が
投稿日: 2012/10/03(Wed) 03:56
投稿者魔界の仮面弁士
アプリケーションが x86ビルドになっているかどうかを確認しておいてください。
また、実行環境に目標バージョンの ADO がインストールされているのかどうかも。

> インストールディスクを作成して、他のパソコンにインストールし、動作させるとこのエラーが発生します。

初めてみるエラーですが、ざっと検索してみると、国内外で
同様の事例が多数報告されているようですね。それも .NET 4 環境で。
http://www.vbfrance.com/forum/sujet-PROBLEME-EXECUTION-APPLIC-CREEE-SUR-W7-64B-AVEC_1546171.aspx
http://www.tech-archive.net/Archive/German/Entwicklung/microsoft.public.de.german.entwickler.dotnet.datenbank/2010-10/msg00000.html
http://stackoverflow.com/questions/5666265/adodbcould-not-load-type-adodb-fieldstointernalfieldsmarshaler-from-assembly

2010 以降での報告が多いという事は、COMタイプの埋め込み機能の障害かもしれません。
ソリューションエクスプローラから、参照設定\ADODB のプロパティで、
[相互運用型の埋め込み]を True から False に変更してみるとどうなりますか?
また、上記を False にした状態で、[ローカルコピー]を False から True にした場合は?


というのも、PIA 版の ADODB ライブラリの場合、Recordset や Field は
COM オブジェクトのまま公開されていますが、Fields コレクションは COM ではなく、
マネージオブジェクトにカプセル化された状態で公開されているためです。
そのため、相互運用型の埋め込みが期待動作していないのでは無いか…と想像しています。


> エラーが発生している部分は「lrsSum.Fields("数量の合計").Value」この部分になります。
「lrsSum.Collect("数量の合計")」にした場合はどうでしょうか?


---- 以下、本題とは関係のない話 ----

> lrsSum.Open(lsSqlSum, godDb, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockReadOnly)
うん? JET Provider は、adOpenDynamic カーソルをサポートしていませんよ。
(そもそも、adOpenDynamic を採用するということ自体がかなり特殊な状況な気が…)

恐らく、.NET 化する以前のコードから間違っているものと推測します。
それでエラーになるわけではないので、間違いに気が付きにくいのですけれどね。

以下、カーソルタイプの違いについて:

adOpenForwarsOnly(前方スクロールタイプカーソル:規定値)
  ・カーソルの後戻り(MovePrevious)が出来ない
  ・プロバイダによって、MoveFirstができるものとできないものがある
  ・ほとんどのDBMSでは、ReadOnly指定のとき、このカーソルがもっともパフォーマンスが高い
adOpenKeyset(キーセットカーソル)
  ・カーソルの移動は自由
  ・他のユーザーによる更新、削除を検知する
  ・他で新しく追加されたレコードは検知しない
adOpenStatic(静的カーソル)
  ・カーソルの移動は自由
  ・他のユーザーによる更新、削除を検知する
  ・他のユーザーによる追加レコードを検知する
 ・adUseClient モードでは常にこれが採用される
adOpenDynamic(動的カーソル)
  ・カーソルの移動は自由
  ・ほかのユーザーによる追加、変更、削除を検知する
 ・完全にサポートしているプロバイダは少ない


その他、Format 関数を使っているところを見ても、VB.NET になり切れていない
レガシーなコードになっているのが非常に気にかかりますが…とりあえず、
VB.NET から ADODB を使う場合の参考資料として幾つかあげておきます。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1294960232
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7478&KLOG=19
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=7198&page=0
http://support.microsoft.com/kb/248287/ja
http://support.microsoft.com/kb/318559/ja

ADO だと ReleaseComObject の手間も考えねばなりませんので、
基本的には、ADO.NET への移行をお奨めしています。

とはいえ、編集可能なカーソルなどを使いたいなどの理由から、ADO.NET では
機能不足という事情が発生することはあるのですが…その場合はせめて、
DAO を採用した方がパフォーマンス面でも望ましいかと。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。