xxx1030
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数47
  • QQ
  • 铜币273枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2135回复:2

[求助]两个ACCESS表关联,分类标注

楼主#
更多 发布于:2010-05-23 21:05
<P>我从ACCESS库中打开一个水库基本情况表,一个实时水位表,其中实时水位表是查询结果转成的一个ITable,两个表关联,图层加上去,选字段标注,都可以成功,就是想筛选超正常水位的值来分类标注,就什么都标不出来,而且地图上所有的标注都没了。</P>
<P>pAnnoprop.WhereClause = "[库水位] > [正常水位]"</P>
<P>如果说是格式问题,我试过了所有格式,加上表名也试了,如果说不能这样的话,我只要把条件设为空,就可以标注出来。</P>
<P>搞了很多天了,真是头疼啊,难道ARCENGINE不能对内存表执行WhereClause ?可是我对其它关联表做是成功的,是不是问题出在查询生成的表没有存到硬盘上?请教高手啊</P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2010-05-24 10:55
<P>下面的代码可以参考下,</P><PRE>Sub LabelPOI(pGFLayer As IGeoFeatureLayer, sLabelField As String, ScaleRange As Long, pRed As Long, pGreen As Long, pBlue As Long, Size As Long)

    Dim pMxDoc As IMxDocument
    Dim pMap As IMap
    
    Set pMxDoc = ThisDocument
    Set pMap = pMxDoc.FocusMap
    
    'Get the label properties
    Dim pLabelProps As ILabelEngineLayerProperties
    Dim pAnnoPropsColl As IAnnotateLayerPropertiesCollection
    Set pAnnoPropsColl = pGFLayer.AnnotationProperties
    pAnnoPropsColl.QueryItem 0, pLabelProps
    
    'get the (first) AnnotateLayerProperties property set in the collection
    Dim pAnnoLayerProps As IAnnotateLayerProperties
    pAnnoPropsColl.QueryItem 0, pAnnoLayerProps, Nothing, Nothing
    
    'Set the label expression
    pLabelProps.IsExpressionSimple = False
    pLabelProps.Expression = "[" ; sLabelField ; "]"
    
    pAnnoLayerProps.AnnotationMinimumScale = ScaleRange
    pAnnoLayerProps.LabelWhichFeatures = esriVisibleFeatures 'geht nicht so wie ich will...
    
    Dim pSym As ITextSymbol
    Set pSym = New TextSymbol
    pSym.Color = BuildRGB(pRed, pGreen, pBlue)
    pSym.Size = Size
    
    'Text maskieren (damit man ihn besser lesen kann...)
    Dim pMask As IMask
    Set pMask = pSym
    pMask.MaskStyle = esriMSHalo
    pMask.MaskSize = 1.5
    Set pMask.MaskSymbol = MakeFillSym(MakeColor(vbWhite))
    
    'Set the label symbol
    Set pLabelProps.Symbol = pSym
    
    'Build label classes
    Dim pAnnoProp As IAnnotateLayerProperties
    pAnnoPropsColl.QueryItem 0, pAnnoProp, Nothing, Nothing
    
    Set pAnnoProp = New LabelEngineLayerProperties
    pAnnoProp.Class = "Restaurant"
    pAnnoProp.WhereClause = "(""PoiTyp"" = 15)"
    pAnnoPropsColl.Add pAnnoProp
    Set pAnnoProp = New LabelEngineLayerProperties
    pAnnoProp.Class = "Andere POIs"
    pAnnoProp.WhereClause = "Not((""PoiTyp"" = 15))"
    pAnnoPropsColl.Add pAnnoProp
    
    For lloop = 0 To pAnnoPropsColl.Count - 1
        pAnnoPropsColl.QueryItem lloop, pAnnoProp
        Select Case pAnnoProp.Class
        Case "Andere POIs"
            pAnnoProp.DisplayAnnotation = False
        Case "Default"
            pAnnoProp.DisplayAnnotation = False
        Case Else
            pAnnoProp.DisplayAnnotation = True
        End Select
    Next lloop
              
    'On/Off the labels
    pGFLayer.DisplayAnnotation = Not pGFLayer.DisplayAnnotation
    
End Sub</PRE>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2010-05-24 10:59
可能是WhereClause的语法错误吧
举报 回复(0) 喜欢(0)     评分
游客

返回顶部