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

mdb DataGridViewでデータの更新をするには??

環境/言語:[VB.NET 2008]
分類:[.NET]

(略)
Dim DA As OleDbDataAdapter = New OleDbDataAdapter(query,connection)
DA.Fill (Dataset)
DataGridView1.DataSource=DataSet.Table(0)

で、Accessのmdb ファイルを表示することはできたのですが
そこから、追加や更新することができません。
DataGridView1_RowValidating

DA.Update(DataSet)をすると
INSERT INTO ステートメントの構文エラーです。

とでてきます。

どうすればいいのでしょうか????
2009/02/23(Mon) 09:36:48 編集(投稿者)

■No24070に返信(1taroさんの記事)
> DataGridView1_RowValidating

RowValidating の段階では、データの入力が完了しているわけではないので、
値としては中途半端な状態になってしまう可能性があります。

処理が分かりにくくなってしまうので、まずは行単位で確定させていくのでは
無く、複数行を編集した後、最後に
> DA.Update(DataSet)をすると
を使って、複数行を一括更新する事から始めて下さい。


この時、DataAdapter の InsertCommand / UpdateCommand / DeleteCommand に
適切な SQL が割り当てられた状態になっているかを確認してください。

今回の場合、INSERT INTO クエリの状態に問題があるかも知れません。
UpdateCommand に指定された CommandText と Parameters の内容を確認してみてください。

たとえば、列名を [ ] で囲むことを忘れていたがゆえに
 ・列名が No という予約語になっている。(Yes/No のキーワードで False に意になる)
 ・列名が Date という予約語になっている。(当日の日付を表す関数になってしまう)
のような状況で、今回の問題を引き起こすことがあります。


また「WHERE 条件の主キー指定がどのように設定されているか」、また、
「パラメータのデータ型が適切に設定されているか」も重要となります。

特に、日付型を使っている場合には注意が必要です。MDB の日付型の列は、
初期状態では OleDbType.DBDate ではなく OleDbType.Date にマッピングされるため、
時刻部を含んだデータを扱う場合、型を DBDate に修正しないと、
更新処理が失敗してしまう可能性があります。
ズバリNoという予約語をテーブルに使っていたのが原因でした。

DA.Update(dataset)を
RowValidatedに移動しました。

VB6からの移行ですがRecordsetとDatasetの違いは戸惑いますね。
解決済み!

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