TQuery,TDataSource、TDBCtrlGridを関連付けてデータを表示しています。
表示しているレコードに対して編集、レコード削除または追加することができます。
表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定して再表示を行おうとするとEInvalidOperationを返されてしまい異常終了してしまいます。
初期表示では表示するものが1件も無い時、新規行追加してから表示するようにしているのですがこのときは正常に動いています。
(初期表示で成功しているTQreryのオブジェクトを退避して上記の例外が発生するActiveを変える直前で入れ替えてあげてもエラーがでました)
何にアクセスして例外が発生しているのかもわからない状態です。
原因が分かる人がいましたら教えてください。
>EInvalidOperationを返されてしまい
これは、ソースコード上ではどの処理を行ったときに発生しますか?
また、
>表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定
これは、具体的には、ソースコードではどのように記述してますか?
あと、Delphiのバージョンや使用しているデータベースは何ですか?
返信遅れてすみません。
質問ないようですが解決することができました。
デバックでフォーカスの位置を調べたところグリッドにフォーカスを当てたまま行の削除を行っていました。新規行追加でActiveをTrueにする前にフォーカスを別の場所に退避することで異常終了は回避できました。
>EInvalidOperationを返されてしまい
>>これは、ソースコード上ではどの処理を行ったときに発生しますか?
デバックでは追えない箇所でエラー落ちしているので厳密な処理内容はわかりませんでした。
>表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定
>>これは、具体的には、ソースコードではどのように記述してますか?
DB操作に関してはTQueryを使ってSQLを実行させています。
画面表示はActiveのTrue,Falseを切り替えることでメモリ上に落とすようなので更新がかかる度にFalse→Trueとしています。
>>Delphiのバージョンや使用しているデータベースは何ですか?
Delphiのバージョンは2010です。DBはAS400にODBCを使って繋いでいます。
ツイート | ![]() |