プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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)
でいいように思います ・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/23 22:44

データの削除を MDBに反映させた後 もう一度削除済みのデータを読み込むのでしょうか?



それとも別のDataSet(または DataTable)へ削除前のデータを読み込みたいのでしょうか?


前者なら TableAdpternのUpdateメソッドで反映させるだけのように思います
後者なら 別のdsオブジェクト等を生成して Fillすればいいのでは ・・・

# 見当違いならご容赦ください

この回答への補足

早速の回答ありがとうございました。
>データの削除を 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が表示されています。
お手数を掛けますが、どのような記述にすればよいかご教授ください。
よろしくお願いします。

補足日時:2008/12/22 11:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!