DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MessageBoxを表示させたら終わらない

環境/言語:[Win XP SP-2 VB.NET 2003 ]
分類:[.NET]

はじめまして。 かなりの初心者の質問ですが
おわかりになる方教えてください。

Function Ora_Execute(ByVal Cstsql As String)

  myCmd = New OracleCommand(Cstsql, Ocnn)←←←←←←@
  Dim txn As OracleTransaction = Ocnn.BeginTransaction()
  Try
     Dim RES As Integer = myCmd.ExecuteNonQuery()
     If RES = 1 Then
        txn.Commit()
     End If
   Catch ex As Exception
     txn.Rollback()
     MessageBox.Show("Can't load Web page" & vbCrLf & ex.Message)←←A
   End Try
End function


 エラーが発生してAのところまで行くのですがメッセージボックスは表示されず
 @に戻ってグルグル回って処理が終わりません。
 何でこうなるのでしょう・・・?

 どなたか教えていただけないでしょうか?
 よろしくお願いします。
こんにちは、じゃんぬねっと です。

■No8104に返信(えみさん)
これだけの情報だと
 「Ora_Execute() メソッドを再度呼び出してるから」
としか言いようがないような...。

例外が発生した時にも、処理を続行しようとしているのでは? :)

普通は、Ora_Execute() メソッドを呼び出す側へ、
何らかを通知する必要があるのですが、

> Function Ora_Execute(ByVal Cstsql As String)

Function なのに、戻り値が指定されていなかったり... orz
Bool値で、エラーかどうか返すべきなのではないでしょうか?
(アクセス修飾詞も、つけておきましょう)
じゃんぬねっとさん 早々のご指摘ありがとうございます。
こんな感じにしてみたのですが・・・。

Function Ora_Execute(ByVal Cstsql As String) As Boolean

    myCmd = New OracleCommand(Cstsql, Ocnn)
    Dim txn As OracleTransaction = Ocnn.BeginTransaction()
    
    Try
       Dim RES As Integer = myCmd.ExecuteNonQuery()
       If RES = 1 Then
          txn.Commit()
          Ora_Execute = True
       End If
       Catch ex As Exception
          txn.Rollback()
          MessageBox.Show("Can't load Web page" & vbCrLf & ex.Message)
          Ora_Execute = False
       End Try
End Function
やはり結果は同じです。
ちなみにMessageBox.Showが無ければぐるぐる回らないんですが・・・。

本当に素人ですいません・・・。
■No8106に返信(えみさんの記事)
> じゃんぬねっとさん 早々のご指摘ありがとうございます。
> こんな感じにしてみたのですが・・・。
>
> Function Ora_Execute(ByVal Cstsql As String) As Boolean
>
> myCmd = New OracleCommand(Cstsql, Ocnn)
> Dim txn As OracleTransaction = Ocnn.BeginTransaction()
>
> Try
> Dim RES As Integer = myCmd.ExecuteNonQuery()
> If RES = 1 Then
> txn.Commit()
> Ora_Execute = True
> End If
> Catch ex As Exception
> txn.Rollback()
> MessageBox.Show("Can't load Web page" & vbCrLf & ex.Message)
> Ora_Execute = False
> End Try
> End Function
> やはり結果は同じです。
> ちなみにMessageBox.Showが無ければぐるぐる回らないんですが・・・。
>
> 本当に素人ですいません・・・。
というか、「メッセージボックスが諸悪の根源」のように思っているようだが…
…見たところそういう感じじゃなさそうなんだが…むしろ記述されていない部分が問題かと思われ。
しかも、この場合ループがないので、「ぐるぐる回る」という言い方も適当じゃないかと…

※オレ.誤爆=1==1;
■No8107に返信(ガッさんの記事)
> ■No8106に返信(えみさんの記事)
>>じゃんぬねっとさん 早々のご指摘ありがとうございます。
>>こんな感じにしてみたのですが・・・。
>>
>>Function Ora_Execute(ByVal Cstsql As String) As Boolean
>>
>> myCmd = New OracleCommand(Cstsql, Ocnn)
>> Dim txn As OracleTransaction = Ocnn.BeginTransaction()
>>
>> Try
>> Dim RES As Integer = myCmd.ExecuteNonQuery()
>> If RES = 1 Then
>> txn.Commit()
>> Ora_Execute = True
>> End If
>> Catch ex As Exception
>> txn.Rollback()
>> MessageBox.Show("Can't load Web page" & vbCrLf & ex.Message)
>> Ora_Execute = False
>> End Try
>>End Function
>>やはり結果は同じです。
>>ちなみにMessageBox.Showが無ければぐるぐる回らないんですが・・・。
>>
>>本当に素人ですいません・・・。
> というか、「メッセージボックスが諸悪の根源」のように思っているようだが…
> …見たところそういう感じじゃなさそうなんだが…むしろ記述されていない部分が問題かと思われ。
> しかも、この場合ループがないので、「ぐるぐる回る」という言い方も適当じゃないかと…
>
> ※オレ.誤爆=1==1;

「ぐるぐる」訂正します。
エラーで
MessageBox.Show("Can't load Web page" & vbCrLf & ex.Message)行に進む
んですがまた
myCmd = New OracleCommand(Cstsql, Ocnn)行に戻ります。
よろしくお願いします。
2004/12/20(Mon) 13:28:38 編集(投稿者)

// 見落としていたので修正

こんにちは、じゃんぬねっと です。

■No8108に返信(えみさんの記事)
> 「ぐるぐる」訂正します。

くどいようですが、呼び出し側に問題があるとしか思えないのです。
呼び出された側を、いくら書かれても、解決にはなりません。
ガッさんの "書いてない部分に問題がある" はそういうことです。

# 呼び出された側で値を返しても、呼び出す側で処理されていなければ問題外です。

> myCmd = New OracleCommand(Cstsql, Ocnn)行に戻ります。

「戻る」って言い方は誤解されるかな...
本当にインラインで実行してみれば、再度どこかで呼び出されているかわかるのですが?
デバッグの手法を間違われてないか、それが心配です。


■ すいません、見落としてました。

> ちなみにMessageBox.Showが無ければぐるぐる回らないんですが・・・。

もしかして、非同期でやってるとか?
じゃんぬねっとさん ガッさんのすいません!!

ご指摘の呼び出している側を一から見直していたら
Timerが何度も呼び出していただけでした・・・。
お騒がせして本当にごめんなさい。

デバッグの仕方の問題でした。 今後気を付けて
投稿する前に見直します。

ど素人に付き合って頂いてすいませんでした。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板