Delphi Alexandria中含fkInternalCalc字段时创建数据集报名称不唯一错误
问题分析与结论
这是Delphi Alexandria版本的已知bug,并非你对fkInternalCalc字段的理解有误。
关于fkInternalCalc与fkCalculated的核心差异
fkInternalCalc:属于数据集内部维护的计算字段,无需绑定OnCalcFields事件,计算逻辑由数据集在dsInternalCalc状态下自动触发,字段值仅在内存数据集内部生效,不会关联底层存储(你的场景本身无Provider,完全是内存数据集)。fkCalculated:需要开发者手动编写OnCalcFields事件逻辑,计算时机在dsCalcFields状态,字段值完全依赖用户代码生成。
问题触发的原因
在Delphi Alexandria 28.0.44500.8973版本中,对无Provider的TClientDataSet执行以下操作时:
- 设置
Active=false - 添加新字段(如整数类型的
TT_APIVERSION) - 右键执行
Create dataset
IDE会错误地将fkInternalCalc类型字段识别为重复命名的物理字段,进而抛出“Name not unique in this context”错误。而fkCalculated字段因需要用户手动处理计算逻辑,不会触发这个误判。
临时解决方案
- 临时切换字段类型:先将所有
fkInternalCalc字段改为fkCalculated,完成新字段添加和Create dataset操作后,再改回fkInternalCalc类型。若这些字段原本绑定了OnCalcFields,需确保代码兼容dsInternalCalc状态(注:fkInternalCalc本身不需要OnCalcFields,建议移除不必要的事件绑定)。 - 先移除再重建:先删除所有
fkInternalCalc字段,完成新字段添加和Create dataset后,重新添加这些字段并设置为fkInternalCalc类型。
内容的提问来源于stack exchange,提问作者Jan Doggen
相关产品推荐
相关产品推荐

