- ベストアンサー
ADOを使用してレコードを追加/更新する方法
- VC++ 6.0でAccess2000のレコードを追加/更新する方法がわかりません。webで調査しましたが、例外が発生します。
- テーブルのNo、名前、カナなどのフィールドがあります。コーディングでは、Noの値を指定してレコードを選択し、AddNewメソッドを使用して新しいレコードを追加、Updateメソッドを使用して既存のレコードを更新しています。
- しかし、実行するとAddNewメソッドとUpdateメソッドで例外が発生します(Unknown error 0x800A0BCD)。追加および更新の方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>vdata.intVal = no; >ではいけないんでしょうか。 >型を変えるって具体的にどうするんでしょうか。 vdata.intVal = no; vdata.ChangeType(VT_I4); こんな感じ。 ようはコンストラクタで引数を指定していなかった場合は、VARTYPEはVT_EMPTYなので intValに直接値を入れるだけではだめということです。 もしくは、_variant_tなら代入演算子がオーバーロードされているので vdata = no; みたいに直接代入。 >また、更新でのUpDateはちゃんとできるんですが、追加でのAddNewの後のUpDateで例外が発生します。 >pfName->Value = vno; pfNameって何でしょう?どこから出てきたんですか?
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
とりあえず、VARIANTは_variant_t型を使ってると仮定します。 >vdata.intVal = no; VARTYPEの指定が無いです。 _variant_t::ChangeType()で型を変えてください。 あとは、 >if (pRs->EndOfFile != FALSE){ ADO::EOFの型はVARIANT_BOOLです。 BOOLではありませんのでFALSEではなくVARIANT_FALSEを使いましょう。
補足
ありがとうございます。 >_variant_t::ChangeType()で型を変えてください。 とりあえず、Updateはうまく行ったんですが、 vdata.intVal = no; ではいけないんでしょうか。 型を変えるって具体的にどうするんでしょうか。 また、更新でのUpDateはちゃんとできるんですが、追加でのAddNewの後のUpDateで例外が発生します。 (IDispatch error #3105) if (pRs->EndOfFile == VARIANT_TRUE){ pRs->AddNew(); vno.intVal = no; pfNo->Value = vno; } vno.Clear(); vno.SetString(namae); pfName->Value = vno; ・・・省略・・・ hr = pRs->Update(); これではだめなんでしょうか。 よろしくお願いします。
お礼
ChangeTypeを使うとできました。 pfNameは、 FieldPtr pfNo, pfName; pfNo = pRs->Fields->GetItem("No"); pfName = pRs->Fields->GetItem("名前"); のようにレコードセットのフィールドを割り付けています。 ありがとうございました。