DataGridの中身をDBへ反映するには?

解決


xyz  2004-01-22 17:19:23  No: 111550  IP: [192.*.*.*]

DataGridで編集した内容をAccessへ反映したいのですが反映できません。
処理は、DataGrid上のセルを1つ選択してUPボタンをクリックすると
1つ上の行と入れ替わるという処理ですが、DataGrid上は入れ替わっていますが
DBに反映されていません。−−−−①
ちなみにDataGrid上のセルをクリックして、そこで値等を入力して
更新をかければDBに反映されております。−−−−②

①の処理は、DataGrid上の行の値を各列ごとに変数を設けて格納しています。
選択行用と、その1つ上の行用にそれぞれ5個ずつ設けてます。
それを
DataGrid1(行番号, 列番号) = 対応する変数名
で入力してます。ちなみにこのときの主キーはNo.という名前でオートナンバーで定義してます。このオートナンバーは入れ替えないようにしています。
重複する主キーが存在しますと言われてしまうので。
②は単に
OleDbDataAdapter1.Update(Me.DataSet11)
だけです。

初心者で色々とネットで検索しながら作成しているので
基本的なところが全く分かってないだけなのかな?と思いますが、
どうか宜しくお願い致します。

編集 削除
岡田 之仁  2004-01-23 08:42:12  No: 111551  IP: [192.*.*.*]

.NETには、接続型と非接続型があります。

Adapterの場合、非接続型ですので、更新処理が必要です。
よって、②で反映されたのは正しいのです。

接続型ですと、①でも更新されたのですが・・・

http://www.microsoft.com/japan/msdn/net/upgrade/adonetprogmsdn.asp

この辺を参照されて、コーディングを変更されては?

以上。

編集 削除
xyz  2004-01-23 18:24:06  No: 111552  IP: [192.*.*.*]

岡田 之仁さん。いつもご返答ありがとうございます。

①の方でDataGrid1(行番号, 列番号) = 対応する変数名で入れ替えた後、
OleDbDataAdapter1.Update(Me.DataSet11)を実行しているのですが
これではダメなんでしょうか?

②で直接DataGrid上のセルの中身を変更して
OleDbDataAdapter1.Update(Me.DataSet11)を実行するのと
①でDataGrid1(行番号, 列番号) = 対応する変数名で入れ替えた後、
OleDbDataAdapter1.Update(Me.DataSet11)を実行するのとでは
何か内部的に違いはあるのでしょうか?

かれこれ2週間近く悩んでますが、なかなか解決できず。。。
宜しくお願い致します。

編集 削除
岡田 之仁  2004-01-24 00:15:48  No: 111553  IP: [192.*.*.*]

①の部分で・・・
OleDbDataAdapter1.Update(Me.DataSet11)
この文を実行する場合、DataSetに対する更新用SQL文が
設定されていないと、更新処理がされない、もしくは、
失敗したり、されなかったりします。

    Dim objCommandBuilder As New OleDb.OleDbCommandBuilder(OleDbDataAdapter1)
    OleDbDataAdapter1.Update(DataSet11)

とかにしてみて下さい。

※  Dim objCommandBuilder As New OleDb.OleDbCommandBuilder(OleDbDataAdapter1)
    この部分は、自動で更新SQL文を作成するコードです。
    手動で更新SQL文を、OleDbCommandのCommandTextに代入しても
    構いません。

②でも、変更箇所によっては、①と同様の更新されない場合
があると思います。

正しくは、自動更新か手動更新のSQL文をセットしてアップデート
する・・・と言うことになります。

お試し下さい。

※  複雑なSQL文で、DataSetを取得し、DataGriに表示させたり
    した場合、自動でのSQL文生成では、間に合わない場合があ
    ります。更新用のSQL文を手動で設定して行うのが、効率的
    にはよい場合があります。

    ただ単に、ひとつのテーブルから単純な条件でセレクトした
    ような場合ですと、上記の自動生成で十分です。

以上。

編集 削除
xyz  2004-01-26 17:52:45  No: 111554  IP: [192.*.*.*]

Dim objCommandBuilder As New OleDb.OleDbCommandBuilder(OleDbDataAdapter1)
OleDbDataAdapter1.Update(DataSet11)
を使用してもDBへ反映できません。

何か他にやることあるのでしょうか

編集 削除
岡田 之仁  2004-01-26 19:38:46  No: 111555  IP: [192.*.*.*]

できない理由が解りませんネ〜

私のメールアドレスは公開していますので、
必要なものを送ってもらえません?
みてみますが・・・

これ以上は、なんとも・・・

以上。

編集 削除
xyz  2004-02-05 22:17:41  No: 111556  IP: [192.*.*.*]

ありがとうございました。無事に解決できました。

編集 削除