• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADODBのRecordset.Deleteのエラーについて誰か助けてください!!)

ADODBのRecordset.Deleteのエラーについて誰か助けてください!

このQ&Aのポイント
  • ADODBのRecordset.Deleteを使用してデータを削除する際にエラーが発生し、レコードの削除ができません。
  • 削除したいレコードが存在しない状態で削除ボタンを押すと、行が見つからないため更新できませんというエラーが表示されます。
  • 削除後にデータグリッド上にはレコードはないのに、メッセージボックスが表示されて追加を促してくるなど、削除と追加の処理が正常に行われません。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

再びmaruru01です。 >Requeryメソッドを実行しないとなぜエラーが出るのでしょうか? 質問欄のコードから察すると、フォームのLoadイベントなどでレコードセットをOpenしておいて、そのままOpenしっぱなしで、終了直前とかにCloseしているようですが、これだと、追加や削除の変更が、Openしているレコードセットに反映されません。 通常は、 Rs.Open ・・・追加や削除処理・・・ Rs.Close という風に、1つの処理ごとにレコードセットをOpenしなおします。 Requeryメソッドは、Closeして元の条件のままOpenするという動作ですので、これを入れるとOpenし直すことになり、変更が反映されるわけです。 >あるtextbox >に何も入力しなかった場合は更新が成功するのですが、ある文字列を >入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する >ことはできません。」といったようなエラーが出るのですが、これは >どうすればいいのでしょうか? 何も入力していない状態では、連結したフィールドに"Null"を格納し、いったん何かを入力して削除すると、長さ0の文字列""を格納します。 長さ0の文字列(空文字列)とNull値は違う扱いになります。 エラーを回避するには、そのテキストボックスに連結したフィールドのプロパティの、[空文字列の許可]を"はい"にします。

negi-bozu
質問者

お礼

再びありがとうございます。 なるほど!これですべての疑問が解決しました。 1つの処理ごとにCloseすればいいのですかー。 うーん、非常に勉強になりました。 空文字も解決しました。親切にありがとうございました!

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 とりあえず、追加と削除のメソッド実行直後に、 Rs.Requery と、再クエリの処理を入れてみて下さい。

negi-bozu
質問者

補足

maruru01さんこんにちは。 さっそくのご回答ありがとうございます。エラーは回避しました。 本を見て勉強していますが、Requeryを実行するとは書いてありません。Requeryメソッドを実行しないとなぜエラーが出るのでしょうか? また、さらに質問ですが複数のtextboxのDataSourceをRecordSet オブジェクトにSetしてレコードを更新していますが、あるtextbox に何も入力しなかった場合は更新が成功するのですが、ある文字列を 入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する ことはできません。」といったようなエラーが出るのですが、これは どうすればいいのでしょうか?また、なぜこのようなエラーが起きるの でしょうか?よろしくお願いします。

関連するQ&A

専門家に質問してみよう