エラーの原因がわかりません

タグの編集
投稿者 熊造  (社会人) 投稿日時 2009/2/24 01:46:22
ReleaseホルダーやDebugホルダーのなかでは問題なく動くのですが、デスクトップなど他の場所に
移して実行するとエラーとなってしまいます。
DBはAccessを使用しています。 どなたか教えていただけませんでしょうか

System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Interop.ADODB, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
ファイル名 'Interop.ADODB, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null' です。
   場所 在庫受払表.frm在庫受払表.ID作成()
   場所 在庫受払表.frm在庫受払表.btn表示_Click(Object sender, EventArgs e)

ID作成()の内容は並べ替えをして番号をつけているだけです。
        Dim db As New ADODB.Connection
        Dim tb As ADODB.Recordset
        Dim mySQL As String = ""
        Dim Ct As Integer

        db.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\****\在庫受払.mdb")
        tb = New ADODB.Recordset

        mySQL = "SELECT 日付,取引区分,ID FROM T_在庫受払表 ORDER BY 日付,取引区分 "

        tb.Open(mySQL, db, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        Ct = 0
        Do Until tb.EOF
            Ct = Ct + 1
            tb.Fields("ID").Value = Ct
            tb.Update()
            tb.MoveNext()
        Loop

        tb.Close()
        db.Close()
投稿者 熊造  (社会人) 投稿日時 2009/2/24 01:48:41
VB2008を使用しています。
書くのを忘れていました
投稿者 かずい  (社会人) 投稿日時 2009/2/24 02:31:00
エラーの内容は、参照設定されているDLLなどが見つからない状態だと思います。

コピーはもしかして、生成されているexeだけ持って行ってますか?
もしそうなら、exeが生成されているフォルダ(Debug or Release)内に
一緒に配置されているDLLも同一フォルダに格納する必要があると思います。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/2/24 02:45:59
> ReleaseホルダーやDebugホルダーのなかでは
holder(ホルダー)ではなく、folder(フォルダー/フォルダ)ですね。


> 他の場所に移して実行するとエラーとなってしまいます。
同フォルダ内にある、exe 以外のファイル一式をコピーしていますか?


> Dim db As New ADODB.Connection
.NET から ADODB を使う事はお奨めできません。
できれば、System.Data.OleDb によるデータアクセス手法に変更すべきかと。

COM オブジェクトである ADODB の場合、オブジェクトのメモリ管理方法が .NET の作法とは
異なっており、ReleaseComObject による解放処理が必須になったり、
>  tb.Fields("ID").Value = Ct
のような使い方が許可されないなど、.NET からだと取り扱いが面倒です。
http://support.microsoft.com/kb/321415/ja



以下、どうしても ADODB でなければならない場合について:


> 'Interop.ADODB, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null' 

参照設定しているのは、自動生成される IA(相互運用機能アセンブリ)ですね。
そうではなく、PIA(プライマリ相互運用機能アセンブリ)を使う必要があります。
http://support.microsoft.com/kb/318559/ja

まず、C:\WINDOWS\assembly の下に、ADODB (Adodb.dll バージョン 7.0.9466.0) の
アセンブリがあることを確認してください。

無ければ、下記などから、ADO の PIA を入手できるかと思いますので、その上で
参照設定をやり直してください。
http://support.microsoft.com/kb/328912/ja

ついでに、このあたりも。
http://support.microsoft.com/kb/321688/ja
投稿者 熊造  (社会人) 投稿日時 2009/2/24 03:24:43
かずいさん 魔界の仮面弁士さん ありがとうございます。
同じホルダー内にDLLをおくことで動作するようになりました。

System.Data.Oledb になんとか移ろうと勉強中なのですがなかなかうまくいかず仕方なくADODBを使っています。 こんな簡単なデータの書込み方がわからないのです。(恥
データをよみこんでDataGridViewに表示するとか それを保存するとかはわかるのですかtb.Fields("ID").Value=Ct これがOleDbやSqlClintだとどういうふうに記述するのかがわからなかったのです。

これは会社で使うものでクライアントは30台ほどでメニューをクリックするとファイルがなかったりバージョンが上がったりするとダウンロードするようになっています。 いまのままではDLLも一緒にダウンロードさせないといけなくなってしまいますね。

一人で使うものではないので何とかしなくてはwwww

丁寧な解説を頂きありがとうございました。