今天碰到一个AO郁闷的问题,解决了,贴出来,大家交流

时间:2021-09-13 03:38:18
我用VB写了一个AO的ActiveX控件,嵌入到IE中。

正确的操作步骤是:
1/加载临时的图层 2/添加临时字段 3/使用临时字段进行进一步的操作 4/清除临时图层


我在程序运行过程中执行了这样的操作:
一、加载的临时图层,二、添加临时字段,三、移出临时图层,四、再次添加临时图层时,五、之前添加的临时字段再次出现在新创建的临时图层中,六、这样想再次添加临时字段就会出现错误FDO_E_TABLE_DUPLICATE_COLUMN。
而事实是,新添加的临时图层中不存在之前添加的临时字段,因为代码的运行结果就是存在之前增加的字段,那么对字段进行操作或者计算是没有问题的,但是,我偏偏用这个字段设置图层的Renderer,而Renderer却得出的是正确的结论,字段是不存在的。

分析了一下原因,说明AO在移出临时图层时,IE将数据源缓存在内存中,只有IE进程结束才能清除临时字段的数据,再次执行才能正确。

现在的解决办法是在移出图层之前将添加的临时字段删除。
IFeatureClass.DeleteFied pField

使用过程中注意如下几个错误:
FDO_E_FIELD_CANNOT_DELETE_LAST_FIELD:需要至少一个属性字段(shp格式)
FDO_E_TABLE_COLUMN_NOT_FOUND:执行操作一二三四之后,执行删除字段时发生此错误。删除图层字段的操作要在临时图层移出之前执行。