是否禁用了TDataset.ObjectView副作用?

时间:2016-01-07 10:36:20

标签: delphi access-violation vcl tclientdataset delphi-10-seattle

今天我偶然发现了德尔福数据集中的adt field types。我们使用自定义客户端数据集将对象绑定到视图中的数据集。使用该数据集和我们的TDbGrid自定义派生并启用FastMM4完全调试模式,我们获得了以下堆栈跟踪的访问冲突:

System.Generics.Collections.TListHelper.DoIndexOfFwd4((kein Wert))
System.Classes.TComponent.FreeNotification($7F961CE0)
Vcl.DBGrids.TColumn.SetField($7F971700)
Vcl.DBGrids.TColumn.GetField
Vcl.DBGrids.TCustomDBGrid.Notification($7F971220,???)
System.Classes.TComponent.RemoveFreeNotifications
System.Classes.TComponent.Destroy
Data.DB.TField.Destroy
System.TObject.Free
Data.DB.TFields.ClearBase(True)
Data.DB.TFields.ClearAutomatic`
Data.DB.TDataSet.DestroyFields
Datasnap.DBClient.TCustomClientDataSet.InternalClose
Data.DB.TDataSet.CloseCursor
Datasnap.DBClient.TCustomClientDataSet.CloseCursor
Data.DB.TDataSet.SetActive(???)

经过一些调试之后,我发现数据集的内部FieldList包含已经销毁的字段。在做了一些更多的研究之后,我发现了禁用属性

DataSet.ObjectView

禁用内部FieldList,访问冲突就会消失。

由于我们不使用ADT字段类型,我怀疑禁用它并没有坏处,但是人们永远不会知道。

背景

我已经遇到了TDataSetTDbGrid的许多问题,从网格中闪烁的scollbar的固​​有问题开始,到oracle数据库的损坏的BCD参数结束。我们从XE3更新到DX10,之前没有发生访问冲突。

  • 我无法发布自定义数据集/自定义网格的代码
  • 我们正在释放数据集 网格
  • 之前

0 个答案:

没有答案