2012-04-16 13 views
2

私はテーブルに大量のデータを投稿するだけでなく、テーブル内の値を変更する必要があるアプリケーションを作成しています。データテーブルのエラーを防ぐテーブルを扱う

私がアプリケーションを書くときはいつも、'Cannot perform this method on a closed dataset'または'tblName not in edit or insert mode'のようなエラーを停止するようです。私は一見毎回これらを取得し、デバッグして何がうまくいかないのかを知るのは簡単ではありません。

私は、これをやり遂げるのをやめる方法についてのガイダンスを探しています。私はそれが私がやっていることを知っています。例えば、現時点では私が取得しています:

は、このコード内のどこかに

「閉じられたデータセットでこの操作を実行できません」。

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; 

は、私はすぐに、これは/プッシュテーブルからデータを引っ張るため不正なコードであると仮定するつもりだ、任意の助けいただければ幸いです。また、あらゆるデバッグの助けが素晴らしいだろう。

+1

私はあなたがdesigntimeデータベースコントロールを放棄し、実際のSQLクエリを使用し始めることをお勧めします。この方法では、GUIに拘束されることは少なく、これらのタイプの問題は再び表示されません... – whosrdaddy

答えて

3

私は推測していた場合、私はそれがこのラインだと言うだろう:

tblSystemAutoUpdate.AsBoolean := False;

あなたは、そのデータセットが実際にオープンすることなく、データセットのフィールドの値を編集しようとしています。

WRTデバッグのヘルプで、例外メッセージが表示され、BreakまたはContinueを尋ねられたら、Breakを選択します。スタックトレースビュー(標準レイアウトの左上のペイン)には、現在のスレッドの関数呼び出しスタックが表示されます。また、 "Use Debug DCUs"プロジェクトオプションを有効にして、コードの開発者ビルドを構築することを確認してください。これにより、デバッガのRTLおよびVCLユニットをトレースすることができます。