タイトル : Re: ADOでの実行時のエラー 投稿日 : 2008/03/17(Mon) 11:33 投稿者 : 魔界の仮面弁士
…そもそも何故、adOpenDynamic を使用されているのでしょう? そもそも mdb では、動的カーソルをサポートしていませんので、 自動的に、別のカーソルモードに補正されてしまうはずです。 (Open 後に、workt1.CursorType の値を確認してみましょう) もしサポートしていたとしても、扱いの難しいカーソルタイプですから、 十分に理解されていない限りは、別のカーソルを選択される事をお薦めします。 (キーセットカーソルとか、前方移動専用カーソルとか) > 'これだと cnt=0 の時から『要求された名前、または序数に対応する項目がコレクションに見つかりません』と実行時エラーが出てしまう。 > For cnt = 0 To 9 変数 cnt が、Long 型(System.Int64)になっていませんか? ADODB.Fields::Item の引数には、64bit 整数型(VT_I8)を指定できません。 > インポートされた名前空間 > ADODB > ADOX > DAO DAO と ADO の混在ですか……しかも .NET で。 > 'これだと問題なし。 とはいえ、COM オブジェクトの解放漏れという点において、 別の意味で問題がありますけれどね。 > VB2005 > NET Framework 2 .NET からの ADODB の利用は避けましょう。 ADO.NET を使う事を 強く お薦めします。 何らかの事情で、ADODB を使わなければいけないのであれば、 以下の点に注意しておいてください。 ・msado15.dll (msado2*.tlb) を参照設定すると自動生成される「Interop.ADODB.DLL」を 使う事は避け、Program Files\Microsoft.NET\Primary Interop Assemblies もしくは グローバル アセンブリ キャッシュにある「ADODB.DLL」を参照設定して使うようにする。 http://support.microsoft.com/kb/318559/ja ・データの取得後は、Recordset, Connection, Command をはじめとする COM オブジェクトを、 Marshal.ReleaseComObject で解放するようにする。 http://support.microsoft.com/kb/321415/ja ・Recordset からデータを取得する際は、MoveNext で列挙する代わりに、 OleDbDataAdapter.Fill によって、DataSet から得ることを検討する。 ・データの書き込みが必要な場合は、RS.Fields(n).Value への書き込みを行う代わりに、 RS.Collect(n) への書き込みを使うようにする。 |