問題が発生したためVBを終了しますを回避するには?

解決


わか  2003-08-28 20:49:12  No: 108313

こんにちは。いつもお世話になっております<(__)>

現在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です。
皆様よろしくお願いいたします<(__)>


わか  2003-08-29 02:00:40  No: 108314

気が付いたことがありましたので書き込ませていただきたいと思います。

①DataGridを使用するのをやめてForm上から消し、変わりにMSHFlexGridを
使用してみたところ、問題なく動作しました。

②また、ポインタの初期化ミスなどで「問題が発生したためVB・・・」という
エラーが発生することも分かりました。

DataGridやMSHFlexGridの違いについても調べてみたのですが、セルをActive
にした時の内部的な動作が分からないので、この①②の事柄に関連があるのか
どうか分かりません(ToT)

度々質問してしまって本当に申し訳ないです・・・


わか  2003-09-01 23:11:07  No: 108315

原因がやっと分かりました(^^;)
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()を抜けた
時点で勝手にメモリは開放されているのでしょうか?


わか  2003-09-05 01:45:40  No: 108316

VBのSP5を入れたら無事動くようになりました^^;
どうやらバグだったようです。
お騒がせいたしましたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加