DataGridで編集した内容をAccessへ反映したいのですが反映できません。
処理は、DataGrid上のセルを1つ選択してUPボタンをクリックすると
1つ上の行と入れ替わるという処理ですが、DataGrid上は入れ替わっていますが
DBに反映されていません。−−−−①
ちなみにDataGrid上のセルをクリックして、そこで値等を入力して
更新をかければDBに反映されております。−−−−②
①の処理は、DataGrid上の行の値を各列ごとに変数を設けて格納しています。
選択行用と、その1つ上の行用にそれぞれ5個ずつ設けてます。
それを
DataGrid1(行番号, 列番号) = 対応する変数名
で入力してます。ちなみにこのときの主キーはNo.という名前でオートナンバーで定義してます。このオートナンバーは入れ替えないようにしています。
重複する主キーが存在しますと言われてしまうので。
②は単に
OleDbDataAdapter1.Update(Me.DataSet11)
だけです。
初心者で色々とネットで検索しながら作成しているので
基本的なところが全く分かってないだけなのかな?と思いますが、
どうか宜しくお願い致します。
.NETには、接続型と非接続型があります。
Adapterの場合、非接続型ですので、更新処理が必要です。
よって、②で反映されたのは正しいのです。
接続型ですと、①でも更新されたのですが・・・
http://www.microsoft.com/japan/msdn/net/upgrade/adonetprogmsdn.asp
この辺を参照されて、コーディングを変更されては?
以上。
岡田 之仁さん。いつもご返答ありがとうございます。
①の方でDataGrid1(行番号, 列番号) = 対応する変数名で入れ替えた後、
OleDbDataAdapter1.Update(Me.DataSet11)を実行しているのですが
これではダメなんでしょうか?
②で直接DataGrid上のセルの中身を変更して
OleDbDataAdapter1.Update(Me.DataSet11)を実行するのと
①でDataGrid1(行番号, 列番号) = 対応する変数名で入れ替えた後、
OleDbDataAdapter1.Update(Me.DataSet11)を実行するのとでは
何か内部的に違いはあるのでしょうか?
かれこれ2週間近く悩んでますが、なかなか解決できず。。。
宜しくお願い致します。
①の部分で・・・
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文を手動で設定して行うのが、効率的
にはよい場合があります。
ただ単に、ひとつのテーブルから単純な条件でセレクトした
ような場合ですと、上記の自動生成で十分です。
以上。
Dim objCommandBuilder As New OleDb.OleDbCommandBuilder(OleDbDataAdapter1)
OleDbDataAdapter1.Update(DataSet11)
を使用してもDBへ反映できません。
何か他にやることあるのでしょうか
できない理由が解りませんネ〜
私のメールアドレスは公開していますので、
必要なものを送ってもらえません?
みてみますが・・・
これ以上は、なんとも・・・
以上。
ありがとうございました。無事に解決できました。
編集 削除