我们正在将 XE 项目迁移到 XE5,但是,我们在测试期间遇到了有关 teechart 的访问冲突异常。
我创建了一个测试应用程序来重现该问题。使用测试应用程序,它在打开第一个 teechart 表单时工作正常,但在第二次打开它或打开新表单时会出现访问冲突异常。
请参考以下QC(内河码头)的随附测试应用程序。
http://qc.embarcadero.com/wc/qcmain.aspx?d=122729
使用 DCU 调试时。在通知TDBChart的OnStateChange事件时发生了异常。
procedure TDataSet.DataEvent(Event: TDataEvent; Info: NativeInt);
begin
...
if NotifyDataSources then
begin
for I := 0 to FDataSources.Count - 1 do
FDataSources[I].DataEvent(Event, Info); // <<---- Access Violation
if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
end;
end;
正如David Berneda在Quality Central所说:
它与在内部使用内部 TObjectList 泛型集合有关 DBChart。代码已得到改进,因此错误现已修复(一个新的 代码负责正确销毁对象列表项)。
作为解决方法,您可以在窗体的 OnClose 事件中添加此代码:
type TChartAccess=class(TDBChart); procedure TOutcomesGraphFm.bbtnCloseClick(Sender: TObject); begin TChartAccess(dbcBar).RemovedDataSource(bsTestScores,bsTestScores.DataSource); Close; end;