第二次打开teechart表单时访问冲突

时间:2014-02-25 01:15:41

标签: delphi delphi-xe5 teechart

我们正在将XE项目迁移到XE5,但是,我们在测试期间遇到了关于teechart的访问冲突异常。

我创建了一个测试应用程序来重新创建问题。使用测试应用程序,打开第一个teechart表单时工作正常,但在第二次打开或打开新表单时会出现访问冲突异常。

请参阅以下QC(embarcadero)附带的测试应用程序。

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;

1 个答案:

答案 0 :(得分:1)

正如David Berneda在Quality Central所说:

  

它与使用内部的TObjectList泛型集合有关   DBChart。代码已经改进,所以现在修复了错误(一个新的   代码负责正确销毁ObjectList项。)

     

作为解决方法,您可以在表单的OnClose事件中添加此代码:

type
  TChartAccess=class(TDBChart);

procedure TOutcomesGraphFm.bbtnCloseClick(Sender: TObject);
begin
  TChartAccess(dbcBar).RemovedDataSource(bsTestScores,bsTestScores.DataSource);

  Close;
end;