- - PR -
エラーの対処方法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-11 11:13
はじめまして。
VB.NETを使用しWinアプリを作成しております。 DBはオラクルです。 画面に検索条件を入れ、結果を同じページにGrapeCityのEl Tabelle MultiRow4.0JのMultiRowSheetにて表示させています。 検索条件のところは入力テキストボックスとサブ画面用ボタンと検索ボタンが配置されていて、サブ画面用ボタンを押すとサブ画面が表示されます。 サブ画面はDLL化したものを使用しており、そこで選択したものを検索画面に表示させています。 検索条件のテキストボックスに値を入れ検索ボタンを押すと検索結果は表示されます。 しかしサブ画面ボタンをクリックし選択後検索ボタンを押すとエラーが出ます。 エラーは 「オブジェクトの現在の状態に問題があるため、操作は有効ではありません。」 です。 色々調べてみたのですが、どこに原因があるかわかりません。 ステップ実行しどこでエラーが出ているか見てみると、検索実行のところのようです。 サブ画面に関しては選択後Diposeしているし、検索実行のところも初期化を行っています。 そもそもこのエラーの意味がわからなくて困っています。 ヒントになることでも結構ですので、どなたか教えていただけませんか?? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-01-11 12:18
??? な、何が何だかわからない・・・ のですが、どうやら最後の 1 行以前は仕様の説明のようですね。(間違っていましたらご指摘ください)
遷移までのコードがないとアドバイスしようがないので、現象が再現できる最小限のコードの提示をお願いします。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-01-11 13:04
わかりにくくて申し訳ありません。
書き直します。 [画面仕様] 画面に検索条件を入れ、結果を同じページにGrapeCityのEl Tabelle MultiRow4.0JのMultiRowSheetにて表示させています。 検索条件のところは入力テキストボックスとサブ画面用ボタンと検索ボタンが配置されていて、サブ画面用ボタンを押すとサブ画面が表示されます。 サブ画面はDLL化したものを使用しており、そこで選択したものを検索画面に表示させています。 [結果] 検索条件のテキストボックスに値を入れ検索ボタンを押すと正しい検索結果が表示されます。 しかしサブ画面ボタンをクリックし、選択後検索ボタンを押すとエラーが出ます。 エラーの内容は 「オブジェクトの現在の状態に問題があるため、操作は有効ではありません。」 です。 [コード(抜粋)] ページロード処理 Dim dr As OracleDataReader Dim ds As New DS Dim intCNT As Integer = 0 Try Dim strSQL As String = GetSQL(SQL.検索) 'SQL取得 Dim Cmd As New OracleCommand(strSQL, DB.DBAccess.DBConnection) 'SQL文セット dr = DB.DBAccess.SelectReader(Cmd) 'SQL文の実行 ←ここでエラーのようです。 Do While dr.Read Dim tr As DS.M_SYAINRow tr = ds.M_SYAIN.NewM_SYAINRow '新しい行の追加 tr.BeginEdit() '編集開始 tr.SYAIN_CD = dr.Item("SYAIN_CD").ToString '社員コード tr.SYAIN_NM = dr.Item("SYAIN_NM").ToString '社員名 tr.BUMON_NM = dr.Item("BUMON_NM").ToString '部門名(このコードをサブ画面から取得します。表示は部門名だけ) intCNT = intCNT + 1 tr.EndEdit() '編集終了 ds.M_SYAIN.Rows.Add(tr) '最後にデータセットに追加する Loop '描写停止 Me.MrsRESULT.Redraw = False Catch ex As Exception Throw ex '例外処理 MessageBox.Show("データの取得処理に失敗しました。" & vbCrLf & ex.Message, "メニューオブジェクト", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try With Me.MrsRESULT .DataSource = ds '表示するテーブルを指定する .DataMember = "M_SYAIN" End With '描写する Me.MrsRESULT.Redraw = True サブ画面検索イベント Dim searchfrm As New サブ画面 Dim resultcheck As DialogResult resultcheck = searchfrm.ShowDialog Me.UcTxtOFFICE.Text = searchfrm.strOFFICECD Me.LblOFFICENM.Text = searchfrm.strOFFICENM searchfrm.Dispose() SQL文 Dim strSQL As String = "" strSQL = "" strSQL += "SELECT " strSQL += " A.SYAIN_CD,A.SYAIN_NM,D.BUMON_NM " strSQL += " FROM M_SYAIN A LEFT JOIN M_SYAIN_KBN B ON " strSQL += " A.SYAINKBN_CD = B.SYAINKBN_CD " strSQL += " LEFT JOIN M_SYOZOKU C ON " strSQL += " A.EIGYO_CD = C.EIGYO_CD " strSQL += " LEFT JOIN M_BUMON D ON " strSQL += " A.BUMON_CD = D.BUMON_CD " strSQL += " ORDER BY A.SYAIN_CD " DB接続はあらかじめDLL化されているのですが、もしかしたらそれがエラーの原因になっているのか、こちらのコードが悪いのかだけでもわかれば対処方法が見つかるかもしれません。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-01-11 13:27
ありがとうございます。 とてもわかりやすいです。
ここにある DB.DBAccess.DBConnection と OracleCommand が連携していないと 「オブジェクトの現在の状態に問題があるため、操作は有効ではありません」 という例外になることがあります。 まずは、Connection が null (Nothing) でないか、OracleCommand のインスタンスにある OracleConnection の参照とで一致しているかを確認してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-01-11 13:39
関係ないけど、気になったので。 StringBuilder の方がよくないですか? 細切れにしている理由もよく分かりませんけど(^_^;) | ||||||||
|
投稿日時: 2008-01-11 13:51
C# なら逐語的リテラル マンセーなんですけどね。 VB では皆さんどのように書いているのでしょうね? 脱線しそうなので別スレッドか Blog か何かで展開してみますか。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-01-11 14:04
じゃんぬねっと様
早速の回答ありがとうございます。 ≫まずは、Connection が null (Nothing) でないか、OracleCommand のインスタンスにある OracleConnection の参照とで一致しているかを確認してみてください。 確認してみたところ確かにConnectionがNothingでした。 でもなぜここでNothingになるのかがわかりません。。。 ページロードの際に全検索をして表示し、検索条件を入れて検索ボタンクリックで再表示させています。 ちょっと書き忘れていたことがあります。 ページロード用と検索ボタンクリック用のコードは全く同じですが、別で書いています。 「ページロード」 (先程記載した検索処理) 「ボタンクリック」 (先程記載した検索処理) こんな感じです。。。 ページロードの処理内容を確認したところ、こちらではConnectionには値が入っていました。しかし検索ボタンクリック処理のところではConnectionがNothingとなっていました。 ページロードと検索ボタンクリックの時に 「Dim Cmd As New OracleCommand(strSQL, DB.DBAccess.DBConnection)」 という同じ処理を行っているというのが悪い原因なのでしょうか?? ページロードの時のConnectionの値を保持したまま、検索ボタンクリックの処理をすればいけるのかなぁと考えましたが、まだやり方がわかっていないので試していません。 それか同じコードを二つ書くのはよくないので、共通で使用できるようにしておこうかと思っています。 一度試してみます。 | ||||||||
|
投稿日時: 2008-01-11 14:09
ひろれい様
確かにこのプログラム意味不明な箇所がたくさんあります。 誰かが書いたものなのですが、それを参考に書くようにと言われているので直したくても直せません。。。 直してあとで色々言われたらいやなので。 初心者なので偉そうなことは言えませんが、私はStringBuilderしか使ったことがないです。 やっぱりStringBuilderが正当な方法なんですかね?? |
1|2|3
次のページへ»