TStatusBar有什么问题?

时间:2013-03-28 10:02:30

标签: database c++builder statusbar tclientdataset tdbgrid

我有两种形式叫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;

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

最后,基于this article,我已经解决了这个问题..我没有注意到在fmEmpl之前创建了dmData,所以当我尝试访问fmEmpl时它会引发任何“访问冲突”错误消息

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

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

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

感谢。