-1

我有两种形式,称为 fmMain 和 fmEmpl。两者的每个 TStatusBar 都称为 sbMain 和 sbEmpl。我有一个名为 dmData 的 TDataModule 来存储数据库组件。

我需要更新 sbEmpl 面板,以便在突出显示单元格网格时显示数据库中的实际值。我一直在尝试使用 TClientDataSet 的 OnAfterScroll 处理程序来处理此事件,但它仅适用于 fmMain,而不适用于 fmEmpl。如果我尝试更新 sbEmpl 面板,它总是会引发错误消息。这是消息:

Access violation at address 00405337 in module 'SpeZet.exe'. Read of address 0000038C.

然而,我在 dmData 上包含了两个标题 (.h)。

这里的 TStatusBar 出了什么问题?

任何的想法?

提前非常感谢。

编辑:好的,这是代码:

void __fastcall TdmData::cdsEmplAfterScroll(TDataSet *DataSet)
{

    vEmpl = "Name = " +
            dmData->cdsEmpl->FieldByName("Name")->AsString +
            " | idEmployee = " +
            dmData->cdsEmpl->FieldByName("idEmployee")->AsInteger +
            " | idJob  = " +
            dmData->cdsEmpl->FieldByName("idJob")->AsInteger;

    fmMain->sbMain->SimplePanel = true;
    fmMain->sbMain->SimpleText = vEmpl;
    fmEmpl->sbEmpl->SimplePanel = true;
    fmEmpl->sbEmpl->SimpleText = vEmpl;
}

“访问冲突”消息在以下行引发:

fmEmpl->sbEmpl->SimplePanel = true;
fmEmpl->sbEmpl->SimpleText = vEmpl;
4

2 回答 2

2

很可能您的数据模块没有指向您的 fbEmpl 表单的有效指针。

于 2013-03-29T20:47:38.273 回答
0

最后,根据这篇文章,我已经解决了这个问题。我没有注意到 dmData 是在 fmEmpl 之前创建的,所以当我尝试访问 fmEmpl 时它会引发任何“访问冲突”错误消息。

我做了一个简单的条件来检查 fmEmpl 是否已创建。这是条件:

if (fmEmpl != NULL) {
    sbEmpl->SimplePanel = true;
    sbEmpl->SimpleText = sData;
}

现在,我可以直接从 dmData 访问和更新 sbEmpl。

谢谢。

于 2013-04-02T09:41:55.833 回答