2014-02-25 82 views
1

我們正在將我們的XE項目遷移到XE5,但是,在測試過程中,我們遇到了有關teechart的訪問衝突異常。第二次打開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; 
+0

德爾福v19.0.14356.6604; TDBChart:「用於RAD Studio,Delphi,C++ Builder XE5 Update 2的TeeChart Lite」。 http://cc.embarcadero.com/item/29708 – user3349133

+0

歡迎來到StackOverflow。請[編輯]您的文章,在您的測試應用程序中包含*相關代碼*。期望人們去EMBT下載它只是爲了弄清楚你要問的不是StackOverflow的工作方式。如果外部鏈接由於某種原因而無法使用,那麼這會使您的問題變得毫無意義,並且代碼也無法位於未來的讀者尋找類似問題的解決方案的搜索中。謝謝。 –

回答

1

由於David Berneda在質量中心說:

其有關使用內部TObjectList泛型集合內 DBChart。代碼已得到改進,所以現在錯誤得到修復(新的 代碼負責正確銷燬ObjectList項目)。

作爲一種變通方法,你可以在你的窗體的OnClose事件添加以下代碼:

type 
    TChartAccess=class(TDBChart); 

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

    Close; 
end;