destnity
路人甲
路人甲
  • 注册日期2004-03-25
  • 发帖数341
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2331回复:7

AO开发中的一些小技巧(A)

楼主#
更多 发布于:2004-07-27 09:06
<P>开发中的一些小技巧:
1.
/////////
  根据feature 的oid 取得对应的feature
  Set pfeature = pFeatureClass.GetFeature(CStr(sOid))
////////</P>
<P>  Set pfeature = pFeatureClass.GetFeature(lOid)
  当不存在featureOID 为 lOid 时,会出错,改为通过函数处理,为了减少时间,也不采用featureclass.search等方法。
  这样成功就取得对应的feature,不然就返回nothing,虽然函数中会产生错误,但不会影响正常操作。
Private Function get_FeatureByOid(pFcls As IFeatureClass, lOid As Long) As IFeature
On Error GoTo EH
  Set get_FeatureByOid = Nothing
  Dim pfeature As IFeature
  If pFcls Is Nothing Then Exit Function
  If lOid < 0 Then Exit Function
  
  If pFcls.HasOID Then
    Set pfeature = pFcls.GetFeature(lOid)
    Set get_FeatureByOid = pfeature
  End If
EH:
  '
End Function</P>
<P>2.取得指定字段名的值
/////////
NameString = pfeature.Value(pFeatureClass.FindField("XXXXXX"))
/////////
同样道理,当找不到字段名为 XXXXXX 的字段时,pfeatureclass.findfield("XXXXXX") 返回值为-1
那么 pfeature.value(-1)当然会出错
同样通过函数替换
Public Function Get_FClsFldIdx(ByVal pFeatureCls As IFeatureClass, ByVal sFldName As String) As Long
'if success then return a value bigger than -1,if not found,then return -1
On Error GoTo EH
  Get_FClsFldIdx = pFeatureCls.FindField(sFldName)
  
  Exit Function
EH:
  '
End Function
使用时:
  ...
  lFldIdx = m_MyLib.Get_FClsFldIdx(pFeatureClass, "XXXXXX")
  If lFldIdx = -1 Then Exit Function '不存在名称为"XXXXXX"的字段
  ...
  Dim pfeature As IFeature
  Dim NameString As String
    
  For i = 0 To pFeatureClass.FeatureCount(Nothing) - 1
    Set pfeature = get_FeatureByOid(pFeatureClass, CLng(i))
    If Not pfeature Is Nothing Then
      NameString = pfeature.Value(lFldIdx)
      ....
    End If
  Next i
  ...</P>
<P>  以上两例是比较简单的例子,在ao在线帮助中也经常有一些会产生错误的隐患,AO只是示例用法,但用法是否合理,要在自已的开发实践中总结。
  这样,使用AO中提供的代码,有的人能调试通过,运行得很正常,则其他人有可能调试不通过。
  希望能对初学者有帮助?
</P>
喜欢0 评分0
签 名: 不能超过 250 个字符 文字将出现在您发表的文章的结尾处。
lilysunny
路人甲
路人甲
  • 注册日期2003-08-18
  • 发帖数160
  • QQ
  • 铜币499枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-07-27 13:27
支持!
黑夜给了你黑色的眼睛,你却拿它来翻白眼!
举报 回复(0) 喜欢(0)     评分
千山暮雪
路人甲
路人甲
  • 注册日期2004-06-25
  • 发帖数87
  • QQ
  • 铜币352枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-07-27 14:50
好! <img src="images/post/smile/dvbbs/em07.gif" />
你来自北京周口, 我来自云南元谋, 我拉着你毛茸茸的小手, 轻轻的咬上一口, 啊, 是爱情让我们直立行走!
举报 回复(0) 喜欢(0)     评分
sunny
路人甲
路人甲
  • 注册日期2004-02-13
  • 发帖数79
  • QQ
  • 铜币228枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-07-27 16:34
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
4楼#
发布于:2004-07-28 09:20
等着出b,c,d<img src="images/post/smile/dvbbs/em04.gif" />
举报 回复(0) 喜欢(0)     评分
ge_zi
论坛版主
论坛版主
  • 注册日期2003-09-04
  • 发帖数278
  • QQ
  • 铜币633枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-07-28 09:33
感谢他,我就是受益者!
举报 回复(0) 喜欢(0)     评分
lingzhi12
路人甲
路人甲
  • 注册日期2004-07-30
  • 发帖数240
  • QQ
  • 铜币60枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-08-04 16:44
<img src="images/post/smile/dvbbs/em01.gif" />
淡泊明志,宁静致远
举报 回复(0) 喜欢(0)     评分
chenyongfeng
路人甲
路人甲
  • 注册日期2004-08-31
  • 发帖数29
  • QQ
  • 铜币184枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-12-25 22:56
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em04.gif" /><img src="images/post/smile/dvbbs/em04.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
眼小聚光
举报 回复(0) 喜欢(0)     评分
游客

返回顶部