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

タイトル 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) への書き込みを使うようにする。

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

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