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