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 " )

 


你可能感兴趣的:(interface)