Win98で動いてたDataGrid+ADODBのプログラムがあるのですが、
これを、Win2000で動かすと、
DataGrid上で変更を加えて、行を変更した時に、
AfterUpdateの中でUpdateメソッドを実行しているのですが、
ここで、「コンシューマーのイベント ハンドラはプロバイダの再入不可能な
メソッドを呼び出しました」のエラーが出ます。
かなり抽象的な質問ですが、どうかよろしくお願い致します。
アクセスのDBですか?
ADODBのバージョンは?
ご確認下さい。
以上。
アクセスのDBになります。
アクセスは2000です。
Microsoft Access Driverは、4.00.6200
ADODBのヴァージョンは、2.53.6200.0です。
よろしくお願いします。
それは、両方のマシンとも同じだったと言うことですか?
ACCESSの場合、Microsoft.Jet.OLEDB.4.0のバージョンも
関係していると思います。
現在は、Microsoft.Jet.OLEDB.4.0 は、SP8 まで出てい
ますので、その辺のご確認を・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;829558
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/security/bulletin/ms04-003.asp
※ VB6 のサービスパックは?
SP5 ですか?
以上。
追加・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;189668
この方式で使用されているのですよネ?
以上。
返事が送れて申し訳ありません。
98と2000なのでそういえば、バージョンは違いますね。
98は今はバージョンが確認できません。
それと、98はVB6SP4、2000はVB6SP5です。
ADOの方式は、前のレスにあったとうりにしています。
こちらの環境でも、Win98が残念ながら無いので確認できません。
尚、VB6のサービスパックは、揃えておいた方が無難です。
ADO のバージョン確認では、VB6 の参照設定で、ADO のバージョン
が表示されていますので、それでわかると思います。
現在、2.8 まで出ていますが、2.7 SP1 が、一般的最新だと思いま
す。セキュリティー等パッチについては、マイクロソフトのサイト
でご確認下さい。
以上。
をを〜そうか?!
因みに、マイクロソフトのサンプルでは・・・
Provider=Microsoft.Jet.OLEDB.3.51
となっています。が、これは、アクセス97を想定しています。
アクセス2000の場合、
Provider=Microsoft.Jet.OLEDB.4.0
としないと、エラーがでます。
どちらを設定されていますか?
※ 外していたらすみません・・・
以上。
すいません。今回の問題のレコードセットをみまちがいしていました。
>この方式で使用されているのですよネ?
は、ADODCコントロールを使用しています。
ADO のバージョンを変えてしまうと今回のAP以外にも
影響を与えてしまう恐れがありですよね?
バージョンを変えないのなら思いっきり書き換えるできでしょうか?
ADODCでしたか・・・では、争点が違いますネ!〜
調べてみて合致する内容がありましたら、またお知らせします。
以上。
一応、捕捉・・・
ADODCも内部的にはADODBを呼び出しますので、
参照設定でのADODBのバージョンは影響がある
場合があります。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9812/vb6da/
ここの、スクロールした中ほどのに記述があります。
参考までに・・・
※ ADODCは、ADO 2.0 を呼び出すとありますが、参照設定を
ADO 2.7 とかにして、ADO 2.0 を外せば、当然、ADO 2.7
での動作になります。
そうしないとエラーになりますし、ActiveX の意味が無く
なりますので・・・
以上。
色々ありがとうございます。
なんとか解決できそうな?気がしてきました。
また何かあれば質問させてもらいたいと思います。
ありがとうございました。
# [解決]マークが付いていますが、一応ゴミレスを。
> それと、98はVB6SP4、2000はVB6SP5です。
可能な限り、SP5を適用してください。(そして、Windows 2000のSP4なども忘れずに)
例えば、VB6SP5を適用していなかった場合、以下のような問題が発生する可能性があります。
http://support.microsoft.com/default.aspx?scid=kb;ja;281887
> ADODBのヴァージョンは、2.53.6200.0です。
これは……[MDAC 2.5 Service Pack 3]ですよね。
VB6 SP3には[MDAC 2.1 SP1a]、VB6 SP4には[MDAC 2.5 (初期版)]、
VB6 SP5には[MDAC 2.6 (初期版)]が同梱されています。
この事を考えると、そのバージョン(2.5 SP3)を使う場合は、
なおさら、VB6SP5にしておいた方が安全だと思いますよ。
特に、MDAC 1.5→2.0、2.0→2.1、2.1→2.5へのバージョンアップの際には、
インターフェイスの変更(拡張)が行われたため、正しい組み合わせで
開発しないと、問題が発生する可能性がある事が知られています。
実際、ADO 2.0→2.1への以降時には、Visual Basic付属のツール
(Visual Database Tools/Data Environment等)の動作に影響がありました。
(もっとも現在のバージョンでは、この問題は解決されていますけれどね)
http://support.microsoft.com/default.aspx?scid=kb;EN-US;257714
http://support.microsoft.com/default.aspx?scid=kb;JA;257714
--- 以下、ちょっとややこしい話 (回答ではありません) ---
ADOの下位互換性が保たれているのは、主にレイトバインドを選択した場合です。
参照設定で運用する場合は、常に「正しいバージョン」を選択するようにしてください。
(どのバージョンを選択するのが望ましいのかは、ケースバイケースですけれど)
ADOの本体は msado15.dll というファイルですが、古いバージョンへの参照設定を
行った場合、このDLLが直接参照設定されるのではなく、バージョンごとに用意された
msado??.tlb というファイルを経由して参照される事になります。
(どのバージョンのADOでも、最終的に利用されるファイルは msado15.dll です)
このときmsado??.tlb 上においては、古いインターフェイスに対して、
別の名前が付けられる事があります。
例えば、『ADO 2.5』を参照設定している際に、「インターフェイス」を意識した
コーディングを行う必要がある場合には、『Set R = New ADODB.Recordset』というコードで
利用される変数を、「As ADODB.Recordset」と書くのではなく、
Dim R1 As ADODB.Recordset15 '…1.5相当のRecordset型
Dim R2 As ADODB.Recordset20 '…2.0相当のRecordset型
Dim R3 As ADODB.Recordset21 '…2.1相当のRecordset型
Dim R4 As ADODB.[_Recordset] '…既定の型(単にADODB.Recordsetと書いた場合は、これに相当)
などのように記述する事がごく稀にあります。
# 上記はRecordsetの場合ですが、Connectionなどにも複数バージョンのインターフェイスがあります。
# また、別のバージョンのADOを参照設定している場合は、別の型定義が必要な場合もあります。
# http://support.microsoft.com/default.aspx?scid=kb;ja;195049
1.5版は、Recordset型の基本インターフェイスとなります。
2.0版は、さらにActiveCommandプロパティなどが追加されています。
2.1版は、さらにIndexプロパティなどが追加されています。
2.5版では、さらにSaveメソッドなどが追加されています。
通常の運用であれば、「ADODB.Recordset」という定義だけで良いのですが、
ADODCなどのように、ADOのデータ型(Recordsetオブジェクトなど)をやりとりする
必要がある場合は、バイナリ互換性を維持しないとエラーとなる事があるため、
クラス名ではなく、インターフェイス名での宣言が必要になる事があります。
http://support.microsoft.com/default.aspx?scid=kb;EN-US;222145
http://support.microsoft.com/default.aspx?scid=kb;JA;222145
レスありがとうございます。一応SP5をあててみます。
大変勉強になりました。