none
フォームのテキストボックスにデータ連結したページを変更した後に、DataAdapter.update で、データが更新されたことになっている RRS feed

  • 質問

  • 初心者です。

    VB.NET2003 にてデータベースアプリの住所録を作成しています。

    データベースはSQLServer2000です。

    VBのSQLDataAdapterウィザードでデータアダプター(SqlDAAddress)、データセット(DataSet)を作成後、フォームのテキストボックスにデータを連結して、ページ切り替えのボタンを配置してMe.BindingContext(DataSet,"Table住所").Positionにてページをきりかえています。

    フォームのClosedイベントで、

            Dim intRow As Integer

     

            Me.BindingContext(DataSet,"Table住所").EndCurrentEdit()

            intRow = SqlDAAddress.Update(DataSet,"Table住所")
            Console.WriteLine("変更数 = " & intRow)

    end sub

     

    データベースをアップデート後に、変更されたレコード数をコンソールに出力しています。

    このときどういうわけか、ページを変更(次のレコードを表示)して、フォームを閉じると、intRowsにゼロ以上の値が

    入ってしまいます。連結したテキストボックスの値を変更していないにもかかわらず、データが更新されたように

    なってしまいます。このようなことを回避できるのでしょうか?

    つまりページを変更しただけでは、データセットが更新されないようにしたいのです。

    ご教授よろしくお願いします。

     

    2008年4月6日 4:08

回答

  • 方法  変更された行をチェックする

    このサイトに詳しく書かれています。

     

     

    私はあまり詳しくはありませんが知っている情報をお伝えします。

    変更されたDataSetを取得する方法は「DataSet#GetChanges()」メソッドです。

    変更された行の確認は「DataSet#HasChanges()」メソッドで確認できるみたいです。

     

    ページというのがよくわかりませんが、ひとつのフォームに対して別レコードのデータを表示させているということでしょうか?

    推測ですが動的にバインド先を変えて表示させればうまく行くんじゃないかと思います。

    バインドではなく別の方法で表示させるデータを変えた場合DataSetの内容も書き換わるんじゃないでしょうか?

    2008年4月6日 7:38
  • 書かれている内容の限りではHasChangesメソッドがTrueになることはありません。書かれていない他のところに原因があると思います。HasChangesメソッドがTrueになるということですので、どこかの列の値が変わっているはずです。まずはそこを確認されることをお勧めします。

    2008年4月6日 16:09
    モデレータ

すべての返信

  • 方法  変更された行をチェックする

    このサイトに詳しく書かれています。

     

     

    私はあまり詳しくはありませんが知っている情報をお伝えします。

    変更されたDataSetを取得する方法は「DataSet#GetChanges()」メソッドです。

    変更された行の確認は「DataSet#HasChanges()」メソッドで確認できるみたいです。

     

    ページというのがよくわかりませんが、ひとつのフォームに対して別レコードのデータを表示させているということでしょうか?

    推測ですが動的にバインド先を変えて表示させればうまく行くんじゃないかと思います。

    バインドではなく別の方法で表示させるデータを変えた場合DataSetの内容も書き換わるんじゃないでしょうか?

    2008年4月6日 7:38
  • ページというのはレコードのことです。ひとつのフォームにはひとつのテーブルのデータのみです。

    DataSet.HasChangesメソッドでもTrueとなってしまいます。

    なぜテキストボックスで値を変更していないにもかかわらず、変更されたことになってしまうのでしょうか?

    Me.Text氏名.DataBindings.Add("Text", DataSet, "Table住所.氏名")とこのようにデータとテキストボックスを

    連結していますが、連結しないで表示させたほうがよいのでしょうか?

     

    2008年4月6日 9:36
  • 書かれている内容の限りではHasChangesメソッドがTrueになることはありません。書かれていない他のところに原因があると思います。HasChangesメソッドがTrueになるということですので、どこかの列の値が変わっているはずです。まずはそこを確認されることをお勧めします。

    2008年4月6日 16:09
    モデレータ
  • よく確認したところコンボボックスの設定にある ConbBox.DataBindings.Add("SelectedItem",DataSet,"Table住所.性別")をやめて、性別テーブル(Table性別)を作成してバインドしたところ、レコードの移動でHasChangesがTrueになることはなくなりました。

    ご指導ありがとうございます。

    2008年4月7日 3:08
  • こんにちは。森田 知良です。

     

    レゲレゲさん、trapemiyaさん、有用な情報ありがとうございました。

     

    vamtnさん、フォーラムのご利用ありがとうございます。
    レゲレゲさん、trapemiyaさんの情報は、有用な情報と思われましたので、
    勝手ながら回答済みチェックを付けさせていただきました。
    追加の質問等ある場合は、是非もう一度投稿してくださるようお願いします。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有効な回答があった場合は、なるべく回答済みボタンを押してチェックを付けてくださるようお願いします。

     

    なお、vamtnさんの意図しない回答にチェックが付いていた場合は、
    回答済みチェックを解除することもできますのでご確認ください。


    それでは、これからもフォーラムのご利用をよろしくお願いいたします。

     

    2008年4月10日 7:21