2012-04-16 52 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 2012-04-16 20:34:33

回答

3

如果我猜的话,我会说,这是该行:

tblSystemAutoUpdate.AsBoolean := False;

你试图没有它的数据集实际上是开放的编辑数据集字段的值。

WRT调试帮助,当您收到异常消息并要求您暂停或继续时,请选择暂停。堆栈跟踪视图(标准布局中的左上窗格)将向您显示当前线程的函数调用堆栈,并且应该能够引导您正确使用它。另外,请确保您已启用“使用调试DCU”项目选项来构建代码的开发人员版本。这样可以让您在调试器中跟踪RTL和VCL单元。