请教IFeatrue读取信息问题

来源:互联网 发布:js true false 编辑:程序博客网 时间:2024/06/05 11:50
遇到一个问题请教一下大家:
我要取得一个IFeatrue的第n列的数据,我用如下方式获取:
VARIANT varValTest;
ipFeature->get_Value(Index,&varValTest); //其中Index是int型数值

但是返回的varValTest.vt是VT_EMPTY

我用如下方式(函数名称没有校对):
VARIANT varValTest;
ipFeature->getTable(&iptable);

long loid=0;
ipFeatrue->getLOID(&loid);
IRowPtr iprow;
iptable->getrow(loid,&iprow);
iprow->getvalue(Index,&varValTest);
就可以返回正确值。

请教一下第一种方式是不是有问题,问题是不是与数值有关系,怎么能解决这个问题?因为第二种方式在大数据量的时候影响效率,因此最好能用第一种方式解决。

谢谢!!!


==========================================

用VC测试了,没有问题的
LONG index=2;
IFeaturePtr pFeature;
pFeatureClass->GetFeature(index,&pFeature);
VARIANT var;
index=5;
pFeature->get_Value(index,&var);


读取IFeature字段信息的代码

IEnvelopePtr ipEnv(m_MapControl.TrackRectangle());
ISelectionEnvironmentPtr ipSeletionEnv(CLSID_SelectionEnvironment);
ipSeletionEnv->put_SearchTolerance(2);
ipSeletionEnv->put_CombinationMethod(esriSelectionResultNew);
m_ipMap->SelectByShape(ipEnv,ipSeletionEnv,false);
iActiveView->PartialRefresh(esriViewGeoSelection,NULL,NULL);
ISelectionPtr ipSelection;
m_ipMap->get_FeatureSelection(&ipSelection);
long selcount;
m_ipMap->get_SelectionCount(&selcount);//获取选择要素的个数
IEnumFeaturePtr ipEnumFeature(ipSelection);
ipEnumFeature->Reset();
IFeaturePtr ipFeature;
ipEnumFeature->Next(&ipFeature);
while(!(ipFeature==0))
{
  BSTR LayerName;
  IObjectClassPtr pObjectClass;
  ipFeature->get_Class(&pObjectClass);
  pObjectClass->get_AliasName(&LayerName);//获得要素的对象名称
  CString rootname=LayerName; 
  IFieldsPtr pFields;
  IFieldPtr pField;
  long Index;//字段索引
  ipFeature->get_Fields(&pFields);
  const CString fieldname="MISNAME";//定义要查询的字段名
  pFields->FindField(_bstr_t(fieldname),&Index);
  //得到具体的字段信息
  CComVariant varValTest;
  ipFeature->get_Value(Index,&varValTest);  、、为什么这样取值一直是空的呢?   
  CString fieldvalue;
  fieldvalue=varValTest.bstrVal;
  ipEnumFeature->Next(&ipFeature);
}
但是这样就可以获取信息了,速度有点慢啊,能不能用前面的方法解决啊?
ipFeature->get_Class(&pObjectClass);
pObjectClass->get_AliasName(&LayerName);//获得要素的对象名称
ipFeature->get_OID(&lOid);
//重新通过IFeatureClas 得到这个要素,因为ipFeature没有返回所有的字段
//他只返回了ID 
ipFeatureClass=pObjectClass;
ITablePtr pTable;
IRowPtr pRow;
pTable=ipFeatureClass;
pTable->GetRow(lOid,&pRow);
pRow->get_Value(Index,&varValTest);

0 0
原创粉丝点击