DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベースが更新されない

環境/言語:[XP,VB.NET,Framework1,1 ]
分類:[.NET]

Accessのファイルを読み込んで追加更新削除を行おうとしています。
メモリ上では追加更新削除できているのですが実際"MDB"ファイルには書き込んでいません。
更新時はエラーも出ずに、"oleAdapter.Update"の戻り値も修正した行のカウントを返しています。

どなたかお教えください。

'データベースに接続
Private Function OpenDBFile() As Boolean

Try
oleConn = New OleDbConnection(strConn) '接続

oleAdapter = New OleDbDataAdapter(strSQL, oleConn) 'アダプタの作成

Dim cmd As OleDbCommand = New OleDbCommand(strSQL, oleConn)
cmd.CommandText = strSQL
oleAdapter.SelectCommand = cmd
oleAdapter.InsertCommand = cmd
oleAdapter.UpdateCommand = cmd
oleAdapter.DeleteCommand = cmd
oleAdapter.Fill(oleDataSet, tableName)
oleAdapter.FillSchema(oleDataSet, SchemaType.Mapped)

oleDatatable = oleDataSet.Tables(tableName) 'データテーブルの作成

Catch eFillDataSet As System.Exception
Throw eFillDataSet
oleConn.Close()
Return False
End Try

Return True

End Function

'更新の関数
Private Sub B_Write_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Write.Click
Dim i As Integer

SelectRow.Item("Memo") = T_Memo.Text()

'更新
Try
i=oleAdapter.Update(oleDataSet)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub
■No20258に返信(初心者Aさんの記事)
> oleAdapter.SelectCommand = cmd
> oleAdapter.InsertCommand = cmd
> oleAdapter.UpdateCommand = cmd
> oleAdapter.DeleteCommand = cmd
とりあえずむちゃくちゃな事をやってるようにしか見えませんが、
。。。紆余曲折の賜物でしょうか。。。(^^;

[DbDataAdapter.Update メソッド (DataSet) ]
http://msdn2.microsoft.com/ja-jp/library/at8a576f(VS.80).aspx
[解説]をじっくり読まれることをお勧めします。
Update が成功するには、有効な UpdateCommand を設定する必要があります。
『有効な』とは正しい UPDATE 文が CommandText として登録されている
ものです。
[DbDataAdapter.UpdateCommand プロパティ]
http://msdn2.microsoft.com/ja-jp/library/system.data.common.dbdataadapter.updatecommand(VS.80).aspx

SelectCommand プロパティを設定後に UpdateCommand を自動生成する方法
もありますが、OleDbCommandBuilder を使います。この方法は万能ではなく、
主キー列を含む必要があったり、単一テーブルのみ可能といった制限が
あります。

>更新時はエラーも出ずに、"oleAdapter.Update"の戻り値も修正した行の
>カウントを返しています。
戻り値までは検証してなかったですが、理不尽なことに、Update に
失敗してもエラーは出なかったです(少なくとも2年前に調査したときは)。
strSQL に設定しているSQLの内容が SELECT 文であれば、更新できていません
ので、戻り値は何かの間違いでは?
るしぇ様
回答がついているとは思わず、お礼が遅くなりました。
ご回答ありがとうございます。
あれからcmdにセットしている値が原因であることに気が付き、
自力でコードを書くのは諦めてアダプタのオブジェクトで生成すること
にしたら解決致しました。

> >更新時はエラーも出ずに、"oleAdapter.Update"の戻り値も修正した行の
> >カウントを返しています。
> 戻り値までは検証してなかったですが、理不尽なことに、Update に
> 失敗してもエラーは出なかったです(少なくとも2年前に調査したときは)。
> strSQL に設定しているSQLの内容が SELECT 文であれば、更新できていません
> ので、戻り値は何かの間違いでは?

間違いでした。値は0で返ってきていました。大変失礼致しました。
色々と有難うございます。参考になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板