追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2854回复:13

如何获得第i个字段的值(vc+mo)

楼主#
更多 发布于:2004-09-11 22:00
<P>请高手指点。。。。。能否详细解释一下VARIANT类型的各个成员怎么用。。。</P>
<P>小弟非常感激。。。。。。。。。</P>
<P>CMoRecordset selectedRecord(ipCurLayer.SearchByDistance(mapPt, tolerance, TEXT("")));//     ipCurLayer是当前层</P>
<P>selectedRecord.MoveFirst();</P>
<P>     CMoFields fields(selectedRecord.GetFields());
     CMoField  shapeField(fields.Item(COleVariant((short)3)));//为什么这样不能得到第3个字段呢?</P>
<P>//CMoField  shapeField(fields.Item(COleVariant(TEXT("特征名称"))));而这样确可以。。。。。
     CMoPolygon shape;
     CString str;
     int i;
     for(i =0; i<selectedRecord.GetCount();i++)
     {
      str = shapeField.GetValueAsString();
      MessageBox(str);
      selectedRecord.MoveNext();
     }</P>
喜欢0 评分0
kmxl
路人甲
路人甲
  • 注册日期2004-10-30
  • 发帖数94
  • QQ
  • 铜币294枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-11-08 17:40
<P>dim rst as mapobjects2.recordset</P><P>set rst=...........</P><P>msgbox rst.fields("字段名").value</P>
举报 回复(0) 喜欢(0)     评分
spring20002
路人甲
路人甲
  • 注册日期2004-09-23
  • 发帖数86
  • QQ
  • 铜币286枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-09-24 12:50
哈哈,真高,以前怎么没想过呢,有高人的qq吗
举报 回复(0) 喜欢(0)     评分
mao__mao_
路人甲
路人甲
  • 注册日期2004-09-19
  • 发帖数41
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-09-23 16:26
终于解决了
<P>用CMoTableDesc不能获得"Shape"和"FeatureId"字段,</P>
<P>后经高手whitehorse指点<img src="images/post/smile/dvbbs/em13.gif" /><img src="images/post/smile/dvbbs/em05.gif" />,可以用CMoIterator类,使用前要先加入MFC例子中的MapObjects2.h,MapHelper.h,MapHelper.cpp</P><img src="images/post/smile/dvbbs/em04.gif" />
举报 回复(0) 喜欢(0)     评分
spring20002
路人甲
路人甲
  • 注册日期2004-09-23
  • 发帖数86
  • QQ
  • 铜币286枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-09-23 15:20
<P>不用VARIANT类型,</P><P>你若只要按数值索引取得字段值的话应该这样</P><P>CMoRecordset recs;</P><P>CMoTableDesc tdesc(recs.GetTableDesc());获得表描述对象</P><P>CString str=tdesc.GetFieldName((short)iItem);</P><P>CMoField field(recs.GetFields().Item(COleVariant(TEXT(str))));
CString str2=field.GetValueAsString();
                </P>
举报 回复(0) 喜欢(0)     评分
mao__mao_
路人甲
路人甲
  • 注册日期2004-09-19
  • 发帖数41
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-09-20 17:41
<P>VARIANT我也用过,我是这样用的</P><P>VARIANT va;</P><P>VariantInit(;va);</P><P>va.vt = VT_I4;</P><P>for(int i=0;i<fields.GetCount();i++)</P><P>{</P><P>        va.lVal = i; </P><P>        shapeField=fields.Item(COleVariant(i));</P><P>        CString str=shapeField.GetName();</P><P>}</P><P>str总是为空。据说CMoField不能在CMoFields中根据索引获得啊。</P>
举报 回复(0) 喜欢(0)     评分
lixaokui
路人甲
路人甲
  • 注册日期2003-12-25
  • 发帖数768
  • QQ28796446
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-09-20 15:36
最好用VARIANT,例子里都是这样用的。
西门吹血,有了鼓风机,就不用吹啦!
举报 回复(0) 喜欢(0)     评分
mao__mao_
路人甲
路人甲
  • 注册日期2004-09-19
  • 发帖数41
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-09-20 11:38
<P>请楼上的看一下,象下边这样用可以吗?</P><P>CMoField  shapeField</P><P>for(int i=0;i<fields.GetCount();i++)</P><P>        shapeField=fields.Item(CComVariant(i));</P><P>为什么编译时说error C2065: 'CComVariant' : undeclared identifier</P><P>多谢!</P>
举报 回复(0) 喜欢(0)     评分
袁绍伦
路人甲
路人甲
  • 注册日期2003-08-08
  • 发帖数654
  • QQ164646905
  • 铜币1336枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2004-09-19 16:44
<P>不要用 COleVariant  用 CCOMVariant </P><P>VARIANT 类型你可以参考  COM 技术内幕一书,里面有较为详细的解释,其实最好的方法是参考 MSDN 。</P><P>一般情况下,应用VC+MO通常不要需要太深入的理解 VARIANT 。因为只是搭桥应用一下,而不是深入应用。应用时用 CComVariant 包一下就可以了。</P>
愿意和大家交朋友! QQ:47559983 MSN:shaolun_yuan@hotmail.com eMail:shaolun-yuan@163.com
举报 回复(0) 喜欢(0)     评分
mao__mao_
路人甲
路人甲
  • 注册日期2004-09-19
  • 发帖数41
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2004-09-19 16:15
<P>楼主用</P><P>VARIANT indexlayer;
VariantInit(;indexlayer);
indexlayer.vt = VT_I4;
indexlayer.lVal = 3; </P><P>CMoField  shapeField(fields.Item(indexlayer))</P><P>这种方法成功了吗?我在下边填了一句</P><P>CString str=shapeField.GetName();</P><P>怎么str总是空的?</P>
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部