- ベストアンサー
ADODBのRecordset.Deleteのエラーについて誰か助けてください!
- ADODBのRecordset.Deleteを使用してデータを削除する際にエラーが発生し、レコードの削除ができません。
- 削除したいレコードが存在しない状態で削除ボタンを押すと、行が見つからないため更新できませんというエラーが表示されます。
- 削除後にデータグリッド上にはレコードはないのに、メッセージボックスが表示されて追加を促してくるなど、削除と追加の処理が正常に行われません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再びmaruru01です。 >Requeryメソッドを実行しないとなぜエラーが出るのでしょうか? 質問欄のコードから察すると、フォームのLoadイベントなどでレコードセットをOpenしておいて、そのままOpenしっぱなしで、終了直前とかにCloseしているようですが、これだと、追加や削除の変更が、Openしているレコードセットに反映されません。 通常は、 Rs.Open ・・・追加や削除処理・・・ Rs.Close という風に、1つの処理ごとにレコードセットをOpenしなおします。 Requeryメソッドは、Closeして元の条件のままOpenするという動作ですので、これを入れるとOpenし直すことになり、変更が反映されるわけです。 >あるtextbox >に何も入力しなかった場合は更新が成功するのですが、ある文字列を >入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する >ことはできません。」といったようなエラーが出るのですが、これは >どうすればいいのでしょうか? 何も入力していない状態では、連結したフィールドに"Null"を格納し、いったん何かを入力して削除すると、長さ0の文字列""を格納します。 長さ0の文字列(空文字列)とNull値は違う扱いになります。 エラーを回避するには、そのテキストボックスに連結したフィールドのプロパティの、[空文字列の許可]を"はい"にします。
その他の回答 (1)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 とりあえず、追加と削除のメソッド実行直後に、 Rs.Requery と、再クエリの処理を入れてみて下さい。
補足
maruru01さんこんにちは。 さっそくのご回答ありがとうございます。エラーは回避しました。 本を見て勉強していますが、Requeryを実行するとは書いてありません。Requeryメソッドを実行しないとなぜエラーが出るのでしょうか? また、さらに質問ですが複数のtextboxのDataSourceをRecordSet オブジェクトにSetしてレコードを更新していますが、あるtextbox に何も入力しなかった場合は更新が成功するのですが、ある文字列を 入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する ことはできません。」といったようなエラーが出るのですが、これは どうすればいいのでしょうか?また、なぜこのようなエラーが起きるの でしょうか?よろしくお願いします。
お礼
再びありがとうございます。 なるほど!これですべての疑問が解決しました。 1つの処理ごとにCloseすればいいのですかー。 うーん、非常に勉強になりました。 空文字も解決しました。親切にありがとうございました!