- ベストアンサー
VB2008データベースの非接続型データベースでUpdateをする際のエラーとは?
- VB2008の非接続型データベースでUpdateをする際にOleDbCommandBuilderを使用していますが、エラーが発生しています。
- エラーの内容がわかっておらず、ネットや参考書でも解決策が見つかりません。
- どなたかこのエラーの解決策を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うーん、厄介ですね。 CommandBuilderは、更新用のSQL文を自動生成するもので、今回の例だと例えば以下のようなUPDATEクエリを自動生成します。 UPDATE 物件 SET [主キー]=[更新後の値],[項目1]=[更新後の値],.... WHERE (([主キー]=[更新前の値] AND (([NULL値なら1]=1 AND [項目1] IS NULL) OR ([項目1]=[更新前の値])) AND ....) したがって、書かれたメッセージが出るのは、読み込んだ時にあったレコードがなくなっているか、主キーの内容が変更されていることにより、更新結果がゼロ件になったときだけだと思うのです。 ソースを見る限り、そのような可能性はないです。 質問者さんの内容を見る限り、 ・対象の物件テーブルは少なくとも今は他に誰も更新したりしない ・物件テーブルを読み込んで更新するまでのソースには特に省略した部分はない と理解しているのですが、あっていますか?
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
> "SQL ServerなのにJet"とはOleDbConnectionの文のことですか? 質問者さんがSQL Serverカテゴリに書き込まれたので、そう思っただけですが、SQL Serverではなく、MS Accessなんですね。 同じ処理を書いてみましたがエラーにはなりませんでした(手元に2007しかないので、JetでなくAceですが)。 したがって、どんなエラーメッセージが出るのか、示していただかないとわからないです。
補足
親切にご回答有難うございます。 実行箇所を下記のように変更してエラーメッセージを表示させると ”同時実行違反:UpdateCommand によって、処理予定の1レコードのうち0件が処理されました。”と表示されます。 Try cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.Update(dSet, "物件") Catch ex as Exception MsgBox(ex.Message) End Try ちなみに Try cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.SelectCommand = New OleDb.OleDbCommand("UPDATE", cn) dAdp.Update(dSet, "物件") Catch ex as Exception MsgBox(ex.Message) End Try としますと”UPDATE ステートメントの構文エラーです。”とメッセージがでます。 お手数をおかけします。
- jamshid6
- ベストアンサー率88% (591/669)
・接続文字列が分かりませんが、SQL ServerなのにJetなんですか? もしかしてSQL Serverにリンクを張ったMDBかなにかを更新するということですか? ・エラーの内容がわからないとコメントできないのでは?
補足
ご回答有難うございます。 データベースの知識が乏しいのですいません。 ACCESSデータベース(.mdb)をテーブルに読み込み、それをDataGridViewに表示して変更された内容を元のデータベースに書き込もうとしています。参考書と全く同じ文を使用していますがエラーが出てしまいます。 わからなくてすいません! "SQL ServerなのにJet" とはOleDbConnectionの文のことですか? 参考書にも記述として Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=****;")とありますが。 教えてください。
補足
いろいろとご親切に対応していただき有難うございます。 まだ、解決はしていませんが、もう一度参考書などで検討してみます。 また、よろしくお願いします。