Skip to main content

Encapulating Dataset Class

Option Explicit

    Private mName As esriCore.IName
    Private mDatasetName As esriCore.IDatasetName
    Private mDataset As esriCore.IDataset
    
    Private mWorkspace As clsWorkspace
    Private mEnumDataset As esriCore.IEnumDataset

Private Sub Class_Initialize()
    Set mWorkspace = New clsWorkspace
    Set mName = New esriCore.featureClassName
End Sub

Private Sub Class_Terminate()
    Set mWorkspace = Nothing
    Set mName = Nothing
End Sub

Public Function getWorkspaceName() As esriCore.IWorkspaceName
    Set getWorkspaceName = mWorkspace.getWorkspaceName
End Function

Public Function getWorkspace() As esriCore.IWorkspace
    Set getWorkspace = mWorkspace.getWorkspace
End Function

Public Function constructWorkspaceTypeWithPath( _
          ByVal Path As String _
        , ByVal workspaceType As String _
    ) As esriCore.IWorkspace

    Set constructWorkspaceTypeWithPath = mWorkspace.constructWorkspaceTypeWithPath( _
          Path _
        , workspaceType _
    )

End Function

Public Function getName() As esriCore.IName
    Set getName = mName
End Function

Public Function setNameFromDatasetName()
    Set mName = mDatasetName
End Function

Public Function constructNameByType(ByVal strDatasetType As String)
    Select Case strDatasetType
        Case "FeatureDataset"
            Set mName = New esriCore.FeatureDatasetName
        Case "FeatureClass"
            Set mName = New esriCore.featureClassName
        Case Else
            MsgBox "Unknown Dataset Type"
    End Select
End Function

Public Function constructNameFromDatasetName(ByVal strDatasetType As String)
    Call constructNameByType(strDatasetType)
    Call setNameFromDatasetName
End Function

Public Function constructNameFromPathName( _
          ByVal Path As String _
        , Optional ByVal strDatasetName As String = "2002alis" _
        , Optional ByVal strDatasetType As String = "FeatureClass" _
        , Optional ByVal list As Boolean = True _
    ) As esriCore.IName
    Call Me.constructDatasetNameFromPathName(Path, strDatasetName, strDatasetType, list)
    Set constructNameFromPathName = mName
End Function

Public Function getDatasetName() As esriCore.IDatasetName
    Set getDatasetName = mDatasetName
End Function

Public Function setDatasetNameFromDataset()
    Set mDatasetName = mDataset.FullName
End Function

Public Function setDatasetNameAndNameFromDataset(ByVal strDatasetType As String)
    Call setDatasetNameFromDataset
    Call constructNameFromDatasetName(strDatasetType)
End Function

' Returns the appropriate DatasetName or Nothing (should be tested on return).
Public Function constructDatasetNameFromPathName( _
          ByVal Path As String _
        , ByVal strDatasetName As String _
        , ByVal strDatasetType As String _
        , Optional ByVal list As Boolean = True _
    ) As esriCore.IDatasetName
'        , Optional ByVal strDatasetName As String = "2002alis" _
'        , Optional ByVal strDatasetType As String = "FeatureClass" _
'        , Optional ByVal list As Boolean = True _
'    ) As IFeatureClassName
    On Error GoTo 0
    
    ' Set the Workspace
    Dim workspaceType As String
    workspaceType = "Access"
    Call Me.constructWorkspaceTypeWithPath(Path, workspaceType)
    ' Select datasets by type
    Select Case strDatasetType
        Case "FeatureDataset"
            Set mEnumDataset = mWorkspace.getWorkspace.Datasets(esriDTFeatureDataset)
        Case "FeatureClass"
            Set mEnumDataset = mWorkspace.getWorkspace.Datasets(esriDTFeatureClass)
        Case Else
            MsgBox "Unknown Dataset Type"
    End Select
    
    ' Find the named dataset
    Set mDataset = mEnumDataset.Next
    Do While Not (mDataset Is Nothing)
        If mDataset.Name = strDatasetName Then
            Call setDatasetNameAndNameFromDataset(strDatasetType)
            If list Then
                Debug.Print vbTab & vbTab & vbTab & "datasetName = " & mDataset.Name
            End If
            
            Set constructDatasetNameFromPathName = mDatasetName
            On Error GoTo 0
            Exit Function
        End If
        Set mDataset = mEnumDataset.Next
    Loop
    
    Debug.Print vbTab & vbTab & "DatasetName " & strDatasetName & " not found."
    On Error GoTo 0
End Function

Public Function refFeatureDatasetNameFromPathName( _
          ByRef strWorkspaceName As String _
        , ByVal strName As String _
        , ByRef pFeatureDatasetName As esriCore.IFeatureDatasetName _
    ) As esriCore.IDatasetName
    On Error GoTo 0
            
    Set mDatasetName = pFeatureDatasetName
    Dim strWorkspaceType As String
    strWorkspaceType = "Access"
    Dim strDatasetType As String
    strDatasetType = "FeatureDataset"
'    Call Me.constructDatasetNameFromPathName(strWorkspaceName, strName, strDatasetType)
    Call Me.constructWorkspaceTypeWithPath(strWorkspaceName, strWorkspaceType)
'    Set mDatasetName.WorkspaceName = pWorkspaceName
    mDatasetName.Name = strName

    Set refFeatureDatasetNameFromPathName = mDatasetName
    On Error GoTo 0
End Function

Public Function refDatasetNameFromWorkspaceNameAndName( _
          ByRef pWorkspaceName As esriCore.IWorkspaceName _
        , ByVal strName As String _
        , ByRef pDatasetName As Object _
        , ByVal strDatasetType As String _
    ) As esriCore.IDatasetName
    On Error GoTo 0
    
    Debug.Print "pWorkspaceName is a " & TypeName(pWorkspaceName)
    Debug.Print "strName is a " & TypeName(strName)
    Debug.Print "pDatasetName is a " & TypeName(pDatasetName)
    Select Case strDatasetType
        Case "FeatureClass"
'            Set mDatasetName = ctype(pDatasetName, esriCore.IFeatureClass)
        Case "FeatureDataset"
            Set mDatasetName = New esriCore.FeatureDatasetName
            Set mDatasetName = pDatasetName
        Case Else
            MsgBox "Unknown dataset type: " & strDatasetType
    End Select

    Set mDatasetName.WorkspaceName = pWorkspaceName
    mDatasetName.Name = strName

    Set refDatasetNameFromWorkspaceNameAndName = mDatasetName
    On Error GoTo 0
End Function

Public Function refFeatureDatasetNameFromWorkspaceNameAndName( _
          ByRef pWorkspaceName As esriCore.IWorkspaceName _
        , ByVal strName As String _
        , ByRef pFeatureDatasetName As esriCore.IFeatureDatasetName _
    ) As esriCore.IDatasetName
    On Error GoTo 0
            
    Set mDatasetName = pFeatureDatasetName
    Set mDatasetName.WorkspaceName = pWorkspaceName
    mDatasetName.Name = strName

    Set refFeatureDatasetNameFromWorkspaceNameAndName = mDatasetName
    On Error GoTo 0
End Function

Public Function getDataset() As esriCore.IDataset
    Set getDataset = mDataset
End Function

Public Function setDatasetFromName()
    Set mDataset = mName.Open
End Function

Private Function deleteDataset()
    On Error GoTo 0
    
    If Not mDataset Is Nothing Then
        Debug.Print vbTab & vbTab & "Deleting dataset_Type = " & mDatasetName.Type
    
        mDataset.Delete
        
''        Set mDataset = Nothing
''        Set mDatasetName = Nothing
'        Set mName = Nothing
'        Set mWorkspace = Nothing
        Call Class_Initialize
    End If

    On Error GoTo 0
End Function

Public Function deleteDatasetViaPath( _
          ByVal PathName As String _
        , ByVal strDatasetName As String _
        , ByVal strDatasetType As String _
        , Optional ByVal list As Boolean = True _
    )
    On Error GoTo 0
    
    Call Me.constructDatasetNameFromPathName( _
              PathName _
            , strDatasetName _
            , strDatasetType _
        )
    Call deleteDataset
    
    On Error GoTo 0
End Function


Public Function test(ByVal strSubroutineToTest As String)
    
    Select Case strSubroutineToTest
        Case "clsDataset.constructDatasetNameFromPathName"
            Dim strWorkspace As String
            strWorkspace = "D:\restored\map\postcodes\data\2001\postcodes.mdb"
            Dim strfeatureDataset As String
            strfeatureDataset = "2002alis"
            Dim strDatasetType As String
            strDatasetType = "FeatureClass"
   
            Dim featureClassName As esriCore.IFeatureClassName
            Set featureClassName = Me.constructDatasetNameFromPathName( _
                    strWorkspace _
                    , strfeatureDataset _
                    , strDatasetType _
                )
            Debug.Print "featureClassName type = " & featureClassName.FeatureType
            Set featureClassName = Nothing
        Case Else
            MsgBox "Unknown subroutine: " & strSubroutineToTest
    End Select
    
End Function
Site maintained by [email protected]