• 締切済み

DAOで同値更新するとException発生

C++,DAO,MySQLで開発しています。 標記の通りなのですが、更新するレコードセットの値をDBのテーブルと 同じものでUPDATEしようとするとExceptionをスローします。 処理の大まかな流れは以下の通りです。 1. DBオープン (CDaoDatabase Open) 2. テーブルオープン (CDaoRecordset Open) 3. トランザクション開始 (BeginTransaction) 4. レコードセットを移動 (FindFirst 何かしらの条件で) 5. 値を設定 (SetFieldValue) 6. レコード更新 (Update) 7. コミット (CommitTransaction) 5.の時点でDBと同じ値を設定した場合に 6.のステートでExceptionスローします。 (5.でDBと違う値なら最後の処理まで難なく通ります。) 4.の時点で意図しないindexに移動しているわけでもないので、5.での同値か異値かの問題であると思っていますが… どうすれば回避できるのでしょうか? ご教授方お願いします。。。。

みんなの回答

回答No.2

>補足になりましたでしょうか?? 例外が起きている訳ですから、列のデータ型や長さ、重複禁止やNOT NULLなどの制約がどうなっているのか分からないと、適切なアドバイスはできません。

回答No.1

(1)表定義、インデクス定義を示せませんか? (2)「5.の時点でDBと同じ値を設定した場合  同じ値とは、具体的にどういう値を、どういう値にしたのですか? (3)「5.でDBと違う値なら最後の処理まで難なく通ります」  違い値とは、具体的にどういう値を、どういう値にしたのですか?

SafeGuard
質問者

補足

[table] personal_info ___________________________________ |_userid_|_firstname_|_familyname_| |_1______|_aaa_______|_AAA________| |_2______|_bbb_______|_BBB________|<- Recordset |_3______|_ccc_______|_CCC________| ※useridはマスタです。 上図のようにuserid=2にRecordsetが移動している状態で 下記のような操作をした場合に動作に違いがでます。 ○同値の場合にException SetFieldValue("firstname", "bbb"); Update(); ○異値の場合は正常 SetFieldValue("firstname", "ddd"); Update(); 補足になりましたでしょうか??

関連するQ&A