我有两种形式叫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;
答案 0 :(得分:2)
很可能你的数据模块没有指向fbEmpl表单的有效指针。
答案 1 :(得分:0)
最后,基于this article,我已经解决了这个问题..我没有注意到在fmEmpl之前创建了dmData,所以当我尝试访问fmEmpl时它会引发任何“访问冲突”错误消息
我创建简单的条件来检查fmEmpl是否已创建。这是条件:
if (fmEmpl != NULL) {
sbEmpl->SimplePanel = true;
sbEmpl->SimpleText = sData;
}
现在,我可以直接从dmData访问和更新sbEmpl。
感谢。