• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADOによるレコードの追加/更新)

ADOを使用してレコードを追加/更新する方法

このQ&Aのポイント
  • VC++ 6.0でAccess2000のレコードを追加/更新する方法がわかりません。webで調査しましたが、例外が発生します。
  • テーブルのNo、名前、カナなどのフィールドがあります。コーディングでは、Noの値を指定してレコードを選択し、AddNewメソッドを使用して新しいレコードを追加、Updateメソッドを使用して既存のレコードを更新しています。
  • しかし、実行するとAddNewメソッドとUpdateメソッドで例外が発生します(Unknown error 0x800A0BCD)。追加および更新の方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.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って何でしょう?どこから出てきたんですか?

kmor
質問者

お礼

ChangeTypeを使うとできました。 pfNameは、 FieldPtr pfNo, pfName; pfNo = pRs->Fields->GetItem("No"); pfName = pRs->Fields->GetItem("名前"); のようにレコードセットのフィールドを割り付けています。 ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

とりあえず、VARIANTは_variant_t型を使ってると仮定します。 >vdata.intVal = no; VARTYPEの指定が無いです。 _variant_t::ChangeType()で型を変えてください。 あとは、 >if (pRs->EndOfFile != FALSE){ ADO::EOFの型はVARIANT_BOOLです。 BOOLではありませんのでFALSEではなくVARIANT_FALSEを使いましょう。

kmor
質問者

補足

ありがとうございます。 >_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(); これではだめなんでしょうか。 よろしくお願いします。

関連するQ&A