データグリッドで、データベースを編集する際、
rs.Delete
や、
rs.MoveNext
を実行する際に
「キー列のフィールドの情報が足りないか、正しくありません。更新の影響を
受ける行が多すぎます。」
といったエラーが起こることがあって、困っています。
どのような条件でこのエラーが発生し、また、回避する方法というのを
知りたいのですが、ご教授のほど、宜しくお願い致します。
Recordset内に、レコードを一意に取得するための情報(基本的には主キー項目)が含まれていないのでは。
早速のお答え、ありがとうございます。
Recordset内に、主キーが含まれていないというのは、
データベース上には、主キーが設定してあっても、Recordsetを
読み込む際に主キーとなるフィールドを省いているとだめだということ
でしょうか?
データグリッド上に主キーとなるフィールドを表示したくなかったため、
そのフィールドを含めていませんでした。
(SELECT文で、データグリッド上に表示させたいフィールドのみを
指定している状態です。)
「マルチポスト」を行う場合、結果を双方に報告するようにしてくださいね。
> データベース上には、主キーが設定してあっても、Recordsetを
> 読み込む際に主キーとなるフィールドを省いているとだめだということでしょうか?
駄目とは限りません。「駄目な事もある」という事です。
データベースによっては、主キー相当の非表示列(ROWID列など)が利用される事もあるので、その場合は、主キーが含まれていなくても更新可能です。
また、OLE DBのカーソル機構を用いず、データベース側でカーソル管理を行っている場合には、主キー情報が無くても、Bookmarkによって更新対象行を特定できますので、その場合も更新が可能です。
> データグリッド上に主キーとなるフィールドを表示したくなかったため、
データグリッドは、列単位での表示/非表示設定ができますよ。
(ちなみに、特定の列を2回表示させたり、また、それぞれを別の書式で表示させたりする事も出来ます)
>「マルチポスト」を行う場合、結果を双方に報告するようにしてくださいね。
了解しました。
主キーをレコードセットに読み込むようにし、データグリッドで
不要なフィールドを表示しないように変更しました。
現状、エラーは発生していません。
データベースに関しての知識が乏しい為、もっと勉強しようと思います。
親切な対応、どうもありがとうございました。
ツイート | ![]() |