こんにちは。いつもお世話になっております<(__)>
現在ADOでOracleに接続して、取得した値をDataGridに表示させています。
表示までは問題なく出来ているのですが、実行後DataGridのセルActiveにして×ボタンで終了
させると以下のエラーが出てVB自体が落ちてしまいます。(セルをActiveにしなければ正常に終了
します。)
「問題が発生したためVisual Basicを終了します。」
デバックすると以下のメッセージが表示されます。
「ハンドルされていない例外は、VB6.EXE(MSDATGRD.OCX)にあります。」
しかし、VBの■ボタンで終了は正常に動作します。また、Form_Unloadイベントの先頭に
ブレークポイントを置きステップインさせていった場合も問題はおきません。
以下のプログラムで行っております。
msgListがDataGrid(^^;)であり、
AllowAddNew,AllowUpdate,AllowDelete,AllowArrowsプロパティは全てFalseに設定されています。
Option Explicit
'*********オブジェクト変数名*********
'コネクションクラス: 変数名 Cn
'レコードセットクラス: 変数名 Rs
'************************************
Private Cn As ADODB.Connection
Private Rs As ADODB.Recordset
Private Sub Form_Load()
Set Cn = New ADODB.Connection
Cn.CursorLocation = adUseClient
Cn.ConnectionString = _
"Provider=MSDAORA.1;User ID=scott;Data Source=hwwk;Persist Security Info=False"
Cn.Open , , "tiger"
Set Rs = New ADODB.Recordset
Set Rs.ActiveConnection = Cn
Rs.Open "emp", Cn, adOpenStatic, adLockReadOnly, adCmdTableDirect
Set msgList.DataSource = Rs.DataSource
End Sub
Private Sub Form_Unload(Cancel As Integer)
Rs.Close
Set Rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub
過去のログを拝見させていただき、「確保しないメモリへのアクセスが原因」とありました。
そのような事してないと思うのですが・・・どうでしょう・・・(><;)
また、他のVBのPGで終了してしまうことは無いので、再セットアップも必要なし・・・?
このような場合どのように対処したらよいのでしょうか?
環境はXP(sp1) VB6.0 Oracle8.1.7です。
皆様よろしくお願いいたします<(__)>
気が付いたことがありましたので書き込ませていただきたいと思います。
①DataGridを使用するのをやめてForm上から消し、変わりにMSHFlexGridを
使用してみたところ、問題なく動作しました。
②また、ポインタの初期化ミスなどで「問題が発生したためVB・・・」という
エラーが発生することも分かりました。
DataGridやMSHFlexGridの違いについても調べてみたのですが、セルをActive
にした時の内部的な動作が分からないので、この①②の事柄に関連があるのか
どうか分かりません(ToT)
度々質問してしまって本当に申し訳ないです・・・
原因がやっと分かりました(^^;)
Private Sub Form_Unload(Cancel As Integer)でVBが落ちてしまっていたようです。
以下のコードをSet msgList.DataSource = Rs.DataSourceの前に書き
Form_unloadを無くすことで問題は解消しました。
Set Rs.ActiveConnection = Nothing
Cn.Close
Set Cn = Nothing
そこで一つ分からないことがあるのですが、Private Sub Form_Load()を抜けた
時点で勝手にメモリは開放されているのでしょうか?
VBのSP5を入れたら無事動くようになりました^^;
どうやらバグだったようです。
お騒がせいたしましたm(__)m
ツイート | ![]() |