• 締切済み

デ-タテ-ブルの内容での更新の書き方が分らず困っています

VB2008とADO.NETを勉強中の初心者です。 以下のようなプログラムで、デ-タテ-ブルの内容を変更後(このプログラムでは削除のみですが、追加の処理もやりたいと思っています)"SYOYOURYOU"を更新して、再度読み込みたいと思っています。 いろいろ、参考書等を見たのですが旨く処理できません。 *DBを再読み込みのために更新* の部分での記述の方法を教えて頂けないでしょうか。 よろしくお願いします。 '*LLCの初期化 Dim LLC As Integer = 0 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\MAPICS\MAPICS-S.mdb" Dim da As OleDbDataAdapter 'DataAdapterの作成 '*LLCを 0 から 10 まで処理 For LLC = 0 To 10 '所要量抽出 'DataAdapterの作成 da = New OleDbDataAdapter("SELECT * FROM SYOYOURYOU WHERE Syo_LLC =" & Str(LLC), cn) 'データを取得 Dim ds As New DataSet da.Fill(ds, "SYOYOURYOU") If ds.Tables("SYOYOURYOU").Rows.Count > 0 Then 'DataGridViewに表示 DataGridView1.DataSource = ds.Tables("SYOYOURYOU") MsgBox("確認1") For i = 0 To ds.Tables("SYOYOURYOU").Rows.Count - 1 'SYOYOURYOUをもとに処理を行う(この部分は省略) '処理済みのSYOYOURYOUのデ-タを削除 Dim dr As DataRow dr = ds.Tables("SYOYOURYOU").Rows(i) dr.Delete() 'DataGridViewに表示 DataGridView1.DataSource = ds.Tables("SYOYOURYOU") MsgBox("確認1") Next '***************************** 'DBを再読み込みのために更新 '***************************** End If Next '終了処理 End

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

教科書どおりの手順で DataAdapterやDataSetを生成してあるのでしょうか? 質問の部分では DataAdapterは『da』、DataSetは『ds』としていますよね これでは Update用のSQLは自前で構築するかOldeDbCommandBuilderで生成することになります dim cb as new OleDbCommandBuilder( da ) といった具合で UpdateやInsert,Delete用のOleDbCommandオブジェクトを生成してdaに関連付けをしておきます # WHERE付で 自動生成したかなぁ ・・・ 削除処理の段階で da.Update(ds) でいいように思います ・・・

SIPPOPAPA
質問者

お礼

お手数をかけました。 重ねての回答ありがとうございました。 Dim cmdbuler As New OleDbCommandBuilder cmdbuler.DataAdapter = da da.Update(ds, "SYOYOURYOU") でうまくDBを書き換えることができました。 今後ともよろしくお願いします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

データの削除を MDBに反映させた後 もう一度削除済みのデータを読み込むのでしょうか? それとも別のDataSet(または DataTable)へ削除前のデータを読み込みたいのでしょうか? 前者なら TableAdpternのUpdateメソッドで反映させるだけのように思います 後者なら 別のdsオブジェクト等を生成して Fillすればいいのでは ・・・ # 見当違いならご容赦ください

SIPPOPAPA
質問者

補足

早速の回答ありがとうございました。 >データの削除を MDBに反映させた後 もう一度削除済みのデータを読み込むのでしょうか はい、上記のような処理をしたいと思っています >前者なら TableAdpternのUpdateメソッドで反映させるだけのように思います 参考書にも以下のように書いてあり、 Dim tb As DataTable tb = OrderDataSet.Goods.GetChanges(DatarowState.Deleted) GoodsTableAdapter.Update(tb) これを質問のプログラムのデ-タセットに置き換えて入力すると Dim tb As DataTable tb = MAPICS_SDataSet.SYOYOURYOU.GetChanges(DataRowState.Deleted) SYOYOURYOUTableAdapter.Update(tb) エラー 1 名前 'MAPICS_SDataSet' は宣言されていません。 エラー 2 名前 'SYOYOURYOUTableAdapter' は宣言されていません。 のエラ-が出てしまいます。 エディタ-のデ-タソ-スウインドウには、'MAPICS_SDataSetのしたに SYOYOURYOUTが表示されています。 お手数を掛けますが、どのような記述にすればよいかご教授ください。 よろしくお願いします。