【问题标题】:Access violation when open the teechart form at the second time第二次打开teechart表单时访问冲突
【发布时间】:2014-02-25 01:15:41
【问题描述】:

我们正在将我们的 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;

【问题讨论】:

  • 德尔福 v19.0.14356.6604; TDBChart:“用于 RAD Studio、Delphi、C++Builder XE5 更新 2 的 TeeChart Lite”。 cc.embarcadero.com/item/29708
  • 欢迎来到 StackOverflow。请edit您的帖子在此处包含您的测试应用程序中的相关代码。期望人们去 EMBT 下载它只是为了弄清楚你在问什么,这并不完全是 StackOverflow 的工作原理。如果由于某种原因外部链接不可用,这会使您的问题变得毫无意义,并且该代码也无法被未来的读者在寻找类似问题的解决方案的搜索中找到。谢谢。

标签: delphi delphi-xe5 teechart


【解决方案1】:

正如David Berneda 在质量中心所说:

它与在内部使用内部 TObjectList 泛型集合有关 数据库图表。代码已得到改进,因此现在修复了错误(一个新的 代码负责正确销毁 ObjectList 项)。

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

type
  TChartAccess=class(TDBChart);

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

  Close;
end;

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2018-08-17
    相关资源
    最近更新 更多