IQueryDef Interface

IQueryDef sets the parameters needed to create an attribute query. The name of the table and a string defining the where clause are required. An optional list of columns may be included to specify the columns to be retrieved. If no columns are specified, all columns will be returned. IQueryDef only can be used with Geodatabase and Personal Geodatabase data sources.


Remarks :

The IQueryDef interface allows the definition of an attribute query based on one or more tables. Multiple table joins may be defined through the use of this interface.   

Note on ORDER BY and returning sorted data: To add ORDER BY and GROUP BY clauses to the attribute query the IQueryFilterDefinition::PostfixClause property can be used prior to creating the cursor.


The following code excerpts show how to get a reference to an IQueryDef interface, set the values of the SubFields, Tables, and WhereClause properties.

Getting a reference:

Dim pQueryDef As IQueryDef
Set pQueryDef = pFeatureWorkspace.CreateQueryDef

 

Setting the SubFields, Tables, and WhereClause:

' Single table with a WhereClause
pQueryDef.Tables = "STATES"
pQueryDef.SubFields 
= "*" 
pQueryDef.WhereClause 
= "STATE_NAME = 'California'"

 

Multiple tables with a join.

pQueryDef.Tables =    "STATES,STATEPOP,STATEAGE" 
pQueryDef.SubFields 
= "*" 
pQueryDef.WhereClause 
= "STATESID=POPID and POPID=AGEID"

 

Using Evaluate:


Dim pCursor As ICursor 
pQueryDef.Evaluate pCursor

 

Below is a complete example for IQueryDef
    ' This example creates a QueryDef
    
    
'Connect to Geodatabase (SDE)
    Dim pPropset As IPropertySet
    
Set pPropset = New PropertySet
    
With pPropset
      .SetProperty 
"Server""griot"
      .SetProperty 
"Instance""5151"
      .SetProperty 
"Database"""
      .SetProperty 
"user""shell"
      .SetProperty 
"password""shell"
      .SetProperty 
"version""SDE.DEFAULT"
    
End With
        
    
Dim pFact As IWorkspaceFactory
    
Set pFact = New SdeWorkspaceFactory
    
    
' Open the Feature Dataset
    Dim pWorkspace As IWorkspace
    
Set pWorkspace = pFact.Open(pPropset, Me.hWnd)
    
    
' Create Feature Workspace
    Dim pFeatureWorkspace As IFeatureWorkspace
    
Set pFeatureWorkspace = pWorkspace
    
    
' Create Query Definition
    Dim pQueryDef As IQueryDef
    
Set pQueryDef = pFeatureWorkspace.CreateQueryDef
    
    
' Provide list of tables to join
    pQueryDef.Tables = "datesjoin,dudatest"
    
    
' Retrieve the fields from all  tables
    pQueryDef.SubFields = "sde.datesjoin.dt_field = sde.dudates.dt_field"
    
    
' Set up join
    pQueryDef.WhereClause = "datesjoin.dt_field = dudates.dt_field"
    
    
' Create FeatureDataset. Note the use of .OpenFeatureQuery. The
    ' Name "MyJoin" is the name of the result of the query def
    ' and is used in place of a Feature Class name.
    Dim pFeatureDataset As IFeatureDataset
    
Set pFeatureDataset = pFeatureWorkspace.OpenFeatureQuery("MyJoin", pQueryDef)
    
    
'Open Layer to test against
    Dim pFeatureClassContainer As IFeatureClassContainer
    
Set pFeatureClassContainer = pFeatureDataset
     
    
Dim pFeatureClass As IFeatureClass
    
Set pFeatureClass = pFeatureClassContainer.ClassByName("MyJoin")

 


posted on 2009-04-23 14:45  炜升  阅读(677)  评论(0编辑  收藏  举报