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:
Set pQueryDef = pFeatureWorkspace.CreateQueryDef
Setting the SubFields, Tables, and WhereClause:
pQueryDef.Tables = "STATES"
pQueryDef.SubFields = "*"
pQueryDef.WhereClause = "STATE_NAME = 'California'"
Multiple tables with a join.
pQueryDef.SubFields = "*"
pQueryDef.WhereClause = "STATESID=POPID and POPID=AGEID"
Using Evaluate:
pQueryDef.Evaluate pCursor
Below is a complete example for IQueryDef
'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")
-----------------------------------------------------------
佛对我说:你心里有尘。我用力的拭擦。