How To: Access a Shapefile with IWorkspaceName


Below is a sample of how to access a Shapefile with the Name objects (IName).


The following code shows how to access a Shapefile using the IFeatureClassName interface.

  1. Start ArcMap.
  2. Create a new UIButtonControl: How To: Create a new UIButtonControl​
    For more information on creating a UIControl, see the ArcGIS Desktop Help topic: 'Creating custom commands with VBA and UI Controls'
  3. Right-click the UIButtonControl and select View Source.
  4. Copy the following code into the UIButtonControl's click event.
    ''This is how to Use the IWorkspaceName interface to get access to a ShapeFile.
    ''Users should change the following 2 variables**************
        ''This is the directory where the ShapeFile lives...
        Dim StrPathToDataBase As String
        StrPathToDataBase = "H:\ESRIDATA\MEXICO"
        ''This is the name of the ShapeFile...
        Dim StrFeatureClassName As String
        StrFeatureClassName = "States"
        ''This is the connection information that is used to access the WorkSpace...
        Dim ppropset As IPropertySet2
        Set ppropset = New PropertySet
       ppropset.SetProperty "DATABASE", StrPathToDataBase
        Dim pWorkSpaceName2 As IWorkspaceName2
        Set pWorkSpaceName2 = New WorkspaceName
        ''Notice this is a String. The ArcObjects help should have a listing of the
        ''other types (featureclass, tables, etc etc)
        pWorkSpaceName2.WorkspaceFactoryProgID = "esriCore.ShapeFileWorkspaceFactory"
        pWorkSpaceName2.ConnectionProperties = ppropset
        Dim pname As IName
        Set pname = pWorkSpaceName2
        Dim pFeatureWorkspace As IFeatureWorkspace
        Set pFeatureWorkspace = pname.Open
        Dim pfeatureclass As IFeatureClass
        '''Look at the IFeatureWorkSpace as you can open Tables, DataSets, etc etc...
        '''Below we use IFeatureWorkSpace::OpenFeatureClass to get a FeatureClass...
        Set pfeatureclass = pFeatureWorkspace.OpenFeatureClass(StrFeatureClassName)
        ''Proving you have a featureclass...
        MsgBox pfeatureclass.FeatureCount(Nothing)