2

大量のデータをテーブルに投稿したり、テーブル内の値を変更したりする必要があるアプリケーションを作成しています。

私がアプリケーションを書くときはいつでも、私の時間のほとんどは次のようなエラーを止めているようです:

'閉じたデータセットでこのメソッドを実行できません'`

また

'tblNameが編集モードまたは挿入モードではありません'`

私は毎回これらを取得しているようですが、デバッグしてどこで何が問題になっているのかを見つけるのは簡単ではありません。

私はこれが起こらないようにする方法についてのガイダンスを探しています、私はそれが私がしていることであることを知っています。たとえば、現時点では次のようになっています。

'閉じたデータセットでこの操作を実行できません'

このコード内のどこか:

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if not tblSystem.Active then
    tblSystem.Open;

  if not tblSpecs.Active then
    tblSpecs.Open;

  tblSpecs.Edit;
  tblSpecs.Post;
  tblSpecs.Close;

  // Post changes to the notes on exit
  tblSystem.Edit;
  tblsystem.Post;
  tblSystem.Close;
end;

procedure TfrmMain.chkAutoUpdateClick(Sender: TObject);
begin
  tblSystem.Edit;
  if chkAutoUpdate.Checked then
    chkInstUpdates.Enabled := True
  else
  begin
    chkInstUpdates.Enabled := False;
    tblSystemAutoUpdate.AsBoolean := False;
  end;
end;

これはテーブルからデータをプッシュ/プルするための悪いコードであるとすぐに推測します。助けていただければ幸いです。また、デバッグのヘルプは素晴らしいでしょう。

4

1 に答える 1

2

私が推測すると、それはこの行だと思います:

tblSystemAutoUpdate.AsBoolean := False;

データセットを実際に開かずに、データセットフィールドの値を編集しようとしています。

WRTデバッグヘルプで、例外メッセージが表示され、[中断]または[続行]を求められたら、[中断]を選択します。スタックトレースビュー(標準レイアウトの左上のペイン)には、現在のスレッドの関数呼び出しスタックが表示されます。これにより、現在のスレッドに直接アクセスできるはずです。また、[デバッグDCUの使用]プロジェクトオプションを有効にして、コードの開発者ビルドをビルドするようにしてください。これにより、デバッガーでRTLおよびVCLユニットをトレースできます。

于 2012-04-16T18:50:47.207 に答える