TQueryについて


たまご  2012-09-19 01:20:59  No: 42942

TQuery,TDataSource、TDBCtrlGridを関連付けてデータを表示しています。

表示しているレコードに対して編集、レコード削除または追加することができます。
表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定して再表示を行おうとするとEInvalidOperationを返されてしまい異常終了してしまいます。

初期表示では表示するものが1件も無い時、新規行追加してから表示するようにしているのですがこのときは正常に動いています。
(初期表示で成功しているTQreryのオブジェクトを退避して上記の例外が発生するActiveを変える直前で入れ替えてあげてもエラーがでました)

何にアクセスして例外が発生しているのかもわからない状態です。
原因が分かる人がいましたら教えてください。


igy  2012-09-19 07:02:39  No: 42943

>EInvalidOperationを返されてしまい

これは、ソースコード上ではどの処理を行ったときに発生しますか?

また、

>表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定

これは、具体的には、ソースコードではどのように記述してますか?

あと、Delphiのバージョンや使用しているデータベースは何ですか?


たまご  2012-09-27 00:06:51  No: 42944

返信遅れてすみません。

質問ないようですが解決することができました。
デバックでフォーカスの位置を調べたところグリッドにフォーカスを当てたまま行の削除を行っていました。新規行追加でActiveをTrueにする前にフォーカスを別の場所に退避することで異常終了は回避できました。

>EInvalidOperationを返されてしまい
>>これは、ソースコード上ではどの処理を行ったときに発生しますか?
デバックでは追えない箇所でエラー落ちしているので厳密な処理内容はわかりませんでした。

>表示している全レコードを削除(表示レコードが無いのでソースでActive=Falseに設定)してから新規行追加(SQLで直接DBにINSERTをかけます)してからActive=Trueに設定
>>これは、具体的には、ソースコードではどのように記述してますか?
DB操作に関してはTQueryを使ってSQLを実行させています。
画面表示はActiveのTrue,Falseを切り替えることでメモリ上に落とすようなので更新がかかる度にFalse→Trueとしています。

>>Delphiのバージョンや使用しているデータベースは何ですか?
Delphiのバージョンは2010です。DBはAS400にODBCを使って繋いでいます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加