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