免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2576|回复: 2
收起左侧

AO开发中的一些小技巧

[复制链接]

2072

主题

100000万

铜板

363

好友

地信专家组

每一次的分离都是为了下一次的相聚

Rank: 14Rank: 14Rank: 14Rank: 14

积分
17622

精华勋章宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章贡献勋章

发表于 2009-11-18 20:50 | 显示全部楼层 |阅读模式
1.
/////////
根据feature 的oid 取得对应的feature
Set pfeature = pFeatureClass.GetFeature(CStr(sOid))
////////

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

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
...

以上两例是比较简单的例子,在ao在线帮助中也经常有一些会产生错误的隐患,AO只是示例用法,但用法是否合理,要在自已的开发实践中总结。
这样,使用AO中提供的代码,有的人能调试通过,运行得很正常,则其他人有可能调试不通过。
希望能对初学者有帮助

1145

主题

10万

铜板

2

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
21817

灌水勋章活跃勋章冰雪节勋章

QQ
发表于 2013-11-18 19:15 | 显示全部楼层
谢谢分享!!!!

评分

参与人数 1铜板 +1 收起 理由
admin + 1 亲,你好快哦~~~

查看全部评分

加强科技支撑和引领  实现地质找矿新突破 。     
回复

使用道具 举报

37

主题

2万

铜板

111

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5763
发表于 2022-3-4 15:16 | 显示全部楼层
谢谢分享,看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表