2

I want to export a query to a Shapefile. If the query is empty I get an error and it will not export. How can I do nothing if the query is empty and export next query in the list?

Sample if I exporting Land but it is no Building on the land I get error

Export_with_query("2", "BUILDING", "1")

Export_with_query("2", "LAND", "1")

 Public Sub Export_with_query(ByVal ep_layer, ByVal ep_name, ByVal ep_query)
 Dim pDoc As IMxDocument
 Dim pMap As IMap
 Dim pFLayer As IFeatureLayer
 Dim pFc As IFeatureClass
 Dim pINFeatureClassName As IFeatureClassName
 Dim pDataset As IDataset
 Dim pInDsName As IDatasetName
 Dim pFSel As IFeatureSelection
 Dim pSelSet As ISelectionSet
 Dim pFeatureClassName As IFeatureClassName
 Dim pOutDatasetName As IDatasetName
 Dim pWorkspaceName As IWorkspaceName
 ' Dim pExportOp As IExportOperation
 Dim pExportOp As ESRI.ArcGIS.GeoDatabaseUI.IExportOperation
 Try
 pDoc = My.ArcMap.Document
 pMap = pDoc.FocusMap
 pFLayer = pMap.Layer(ep_layer)
 pFc = pFLayer.FeatureClass
 'Get the FcName from the featureclass
 pDataset = pFc
 pINFeatureClassName = pDataset.FullName
 pInDsName = pINFeatureClassName
 'Get the selection set
 pFSel = pFLayer
 pSelSet = pFSel.SelectionSet
 Dim pQFilter As IQueryFilter
 pQFilter = New QueryFilter
 pQFilter.WhereClause = "TYPE = '" & ep_query & "'"
 If pFc.FeatureCount(pQFilter) = 0 Then
 Exit Sub
 Else
 'Define the output feature class name
 pFeatureClassName = New FeatureClassName
 pOutDatasetName = pFeatureClassName
 pOutDatasetName.Name = ep_name
 pWorkspaceName = New WorkspaceName
 If Chk_default_path.Checked = True Then
 pWorkspaceName.PathName = "c:\map"
 Else
 pWorkspaceName.PathName = Txt_path.Text
 End If
 pWorkspaceName.WorkspaceFactoryProgID = _
 "esriCore.shapefileworkspacefactory.1"
 pOutDatasetName.WorkspaceName = pWorkspaceName
 'pFeatureClassName.FeatureType = esriFTSimple
 pFeatureClassName.FeatureType = ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple
 ' pFeatureClassName.ShapeType = esriGeometryAny
 pFeatureClassName.ShapeType = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryAny
 pFeatureClassName.ShapeFieldName = "Shape"
 'Export
 ' pExportOp = New ExportOperation
 pExportOp = New ESRI.ArcGIS.GeoDatabaseUI.ExportOperation
 ' pExportOp.ExportFeatureClass(pInDsName, Nothing, pSelSet, Nothing, pOutDatasetName, 0)
 pExportOp.ExportFeatureClass(pInDsName, pQFilter, pSelSet, Nothing, pOutDatasetName, 0)
 'pExportOp.ExportFeatureClass(pInFClassName, pQFilter, pSelSet, pGeomDef, pOutDatasetName, 0)
 ' End If
 Catch ex As Exception
 MessageBox.Show("Error exporting map: " & vbCrLf & ex.ToString)
 Finally
 End Try
End Sub
Hornbydd
44.9k5 gold badges42 silver badges84 bronze badges
asked Nov 5, 2014 at 17:30

2 Answers 2

3

You get the selection set on the feature layer but then you do a feature count on the feature class, an object that does not support selections. So your current logic makes no sense.

Now do you want to export an EXISTING selection or do you want to SELECT then export?

If you want to export an existing selection then delete the Featurecount code as that is not doing anything for you.

You would need to write:

'Get the selection set
pFSel = pFLayer
pSelSet = pFSel.SelectionSet
If pSelSet.Count = 0 then
 Exit Sub
End if

If you want to SELECT and then export I would use code:

Dim pQFilter As IQueryFilter
pQFilter = New QueryFilter
pQFilter.WhereClause = "TYPE = '" & ep_query & "'"
pFSel.SelectFeatures(pQFilter,esriSelectionResultNew,False)
pSelSet = pFSel.SelectionSet
If pSelSet.Count = 0 then
 Exit Sub
End if
answered Nov 5, 2014 at 20:24
3
  • Like it, you've got both ways here: an existing selection and creating a new selection based on a query. Just be aware that the featureselection is iterated on IEnumFeature and the selection set is iterated using an IFeatureCursor - both iterate IFeature objects but their next one approaches are different... you will need to keep track of which one you're using (a boolean works here) and either IFeatureCursor.NextFeature() or IEnumFeature.Next() as appropriate. Commented Nov 5, 2014 at 21:39
  • Thanks for the help I am using select By Graphics to mark the area I want to export so I am finish to Select few layer to export I don't get the error anymore but I export to much outside the area I mark with Select By Graphics Commented Nov 6, 2014 at 8:34
  • The first one works :) Hornbydd, artwork21 Thanks for your help with this ! Regards Sigster Commented Nov 6, 2014 at 8:43
0

You will have to use an if statement to check the feature count using IFeatureClass.FeatureCount Method, before exporting.

answered Nov 5, 2014 at 17:38
2
  • 1
    I try to use this it just ignore it :) If pFc.FeatureCount(pQFilter) = 0 Then Exit Sub Else Commented Nov 5, 2014 at 18:11
  • Can you update your code snippet with the logic included? Commented Nov 5, 2014 at 18:45

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.