tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルmdbファイルからの読み取りについて
記事No4347
投稿日: 2006/09/28(Thu) 20:59
投稿者ライス
mdbファイルを読み込み変数に格納する処理を作っていますが、mdbに接続しSQLの設定までは苦労も無く
できましたがその先でなんだか良くわからない状況に陥ってしまいました。
例えば、

        m_dbDataReader = m_dbCommand.ExecuteReader()
  ●1   m_dbDataReader.Read()
        ' Inputの各項目に内容を入力していく
        Detail.txt***.Text = m_dbDataReader.Item("***")
        Detail.txt***.Text = m_dbDataReader.Item("***")
        Detail.txt***.Text = m_dbDataReader.Item("***")
        Detail.txt***.Text = m_dbDataReader.Item("***")
        Detail.txt***.Text = m_dbDataReader.Item("***")
  ●2   Detail.txt***.Text = m_dbDataReader.Item("***")
        'Readerを閉じる
       m_dbDataReader.Close()

*:適当な列名 ●:ブレークポイント

上記のような場合、●1から●2へF5を使って実行するのと、F10を使って一行ずつ実行するのでは
同じ処理を通ってるのに結果が変わってしまいます。
原因はm_dbDataReader.Read()をしていないのに勝手にレコードが進んでいるせいみたいです。
何回も試してみると、どうやらF5やF10を押した回数だけレコードが進んでしまいます・・・
つまり●1から●2まで F5を使って実行     → レコードが1進む
           F10を使って1行ずつ実行 → レコードが6進む
というわけのわからない状態です・・・
後者の場合、該当レコードが6つ以下なら当然途中でエラーで終了です。
そうでなくとも、勝手にレコードが進むので入ってる内容が無茶苦茶です。

開発環境はWindows2000、VB.NET2003です。
どなたかこの状況を打破できる案をご教授願えませんでしょうか?

[ツリー表示へ]
タイトルRe: mdbファイルからの読み取りについて
記事No4348
投稿日: 2006/09/28(Thu) 21:22
投稿者魔界の仮面弁士
たとえば、下記のようなコードがあるとします。

-------------------------
Module Module1
    Sub Main()
        Dim X(4) As Integer

        _Value = 0
        X(0) = Value    'ここでブレーク
        X(1) = Value
        X(2) = Value
        X(3) = Value
        X(4) = Value
    End Sub

    Private _Value As Integer
    Public ReadOnly Property Value() As Integer
        Get
            _Value += 1
            Return _Value
        End Get
    End Property

End Module
----------------

この場合、一時停止中に、『X(0) = Value』の行の Value の上にマウスカーソルを重ねると、
現在の値が返されるかと思います。

しかも、カーソルを重ねなおすたびに、値が増えていくはずです。
もしかしたら、これと同じような現象が、どこかで起こっているかもしれません。


たとえば、デバッグ中に『自動変数』ウィンドウを開いていたりとか…。
『ウォッチ』ウィンドウにそれらが割り当てられていたりとか…。

[ツリー表示へ]
タイトルRe^2: mdbファイルからの読み取りについて
記事No4353
投稿日: 2006/09/29(Fri) 09:44
投稿者ライス
魔界の仮面弁士様、返信ありがとうございます。
ご指摘の通り、いつのまにか m_dbDataReader.Read() がウォッチウィンドウの中に紛れ込んで
いましたのでこれを削除したところ正常に動きました。
ウォッチウィンドウの中はあくまで変数等の動向を知るためのもので、プログラムに影響しない物だと
思い込んでいたのが失敗の原因でした。

[ツリー表示へ]