Geodatabase Designer
bin\modUtility.bas

' Copyright 2008 ESRI
'
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
'
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
'
' See use restrictions at <your ArcGIS install location>/developerkit/userestrictions.txt.


Option Explicit

Private Const MODULE_NAME As String = "modUtility.bas"

'==================================================================================

'--------------------------
' RESET ObjectClass GUID's
'--------------------------

Public Sub GUIDReset(ByRef pApplication As IApplication)
    On Error GoTo ErrorHandler
    '
    Dim pGxApplication As esriCatalogUI.IGxApplication
    Dim pStatusBar As esriSystem.IStatusBar
    Dim pMouseCursor As esriFramework.IMouseCursor
    '
    Dim pGxObject As IGxObject
    Dim pGxDatabase As IGxDatabase
    Dim pWorkspace As IWorkspace
    Dim pDataset As IDataset
    Dim pEnumDataset As IEnumDataset
    Dim pDataset_FD As IDataset
    Dim pEnumDataset_FD As IEnumDataset
    '---------------------------------
    ' Set GxApplication and StatusBar
    '---------------------------------
    Set pGxApplication = pApplication
    Set pStatusBar = pApplication.StatusBar
    '---------------------
    ' Change Mouse Cursor
    '---------------------
    Set pMouseCursor = New esriFramework.MouseCursor
    Call pMouseCursor.SetCursor(2)
    '
    Set pGxObject = pGxApplication.SelectedObject
    If TypeOf pGxObject Is IGxDatabase Then
        Set pGxDatabase = pGxObject
        Set pWorkspace = pGxDatabase.Workspace
        Set pEnumDataset = pWorkspace.Datasets(esriDTAny)
        Set pDataset = pEnumDataset.Next
        Do Until pDataset Is Nothing
            Select Case pDataset.Type
            Case esriDTFeatureDataset
                Set pEnumDataset_FD = pDataset.Subsets
                Set pDataset_FD = pEnumDataset_FD.Next
                Do Until pDataset_FD Is Nothing
                    If pDataset_FD.Type = esriDTFeatureClass Then
                        pStatusBar.Message(0) = "Updating GUID's for " & pDataset_FD.Name
                        Call SetGUID(pDataset_FD)
                    End If
                    Set pDataset_FD = pEnumDataset_FD.Next
                Loop
            Case esriDTFeatureClass, esriDTTable
                Call SetGUID(pDataset)
                pStatusBar.Message(0) = "Updating GUID's for " & pDataset.Name
            End Select
            Set pDataset = pEnumDataset.Next
        Loop
    Else
        MsgBox "Please select Personal or ArcSDE Geodatabase", vbExclamation
    End If
    '---------------------
    ' Restore MouseCursor
    '---------------------
    Set pMouseCursor = Nothing
    '
    Exit Sub
ErrorHandler:
    Call HandleError(False, "GUIDReset " & MODULE_NAME & " (" & CStr(Erl) & ")", Err.Number, Err.Source, Err.Description)
End Sub

Private Sub SetGUID(ByRef pDataset As IDataset)
    On Error GoTo ErrorHandler
    '
    Dim pClassSchemaEdit As IClassSchemaEdit
    Dim pFeatureClass As IFeatureClass
    Dim pCLSID As UID
    Dim pEXTCLSID As UID
    '
    Set pClassSchemaEdit = pDataset
    Set pCLSID = New UID
    Set pEXTCLSID = New UID
    '
    Select Case pDataset.Type
    Case esriDTTable
        pCLSID.Value = GUID_TABLE_CLSID
        Set pEXTCLSID = Nothing
    Case esriDTFeatureClass
        Set pFeatureClass = pDataset
        Select Case pFeatureClass.FeatureType
        Case esriFTAnnotation
            pCLSID.Value = GUID_ANNOTATION_CLSID
            pEXTCLSID.Value = GUID_ANNOTATION_EXTCLSID
        Case esriFTDimension
            pCLSID.Value = GUID_DIMENSION_CLSID
            pEXTCLSID.Value = GUID_DIMENSION_EXTCLSID
        Case esriFTComplexEdge
            pCLSID.Value = GUID_COMPLEXEDGE_CLSID
            Set pEXTCLSID = Nothing
        Case esriFTSimpleEdge
            pCLSID.Value = GUID_SIMPLEEDGE_CLSID
            Set pEXTCLSID = Nothing
        Case esriFTSimpleJunction
            pCLSID.Value = GUID_SIMPLEJUNCTION_CLSID
            Set pEXTCLSID = Nothing
        Case esriFTSimple
            pCLSID.Value = GUID_FEATURECLASS_CLSID
            Set pEXTCLSID = Nothing
        End Select
    End Select
    '
    Call pClassSchemaEdit.AlterInstanceCLSID(pCLSID)
    '
    If pEXTCLSID Is Nothing Then
        Call pClassSchemaEdit.AlterClassExtensionCLSID(Nothing, Nothing)
    Else
        Call pClassSchemaEdit.AlterClassExtensionCLSID(pEXTCLSID, Nothing)
    End If
    '
    Exit Sub
ErrorHandler:
    Call HandleError(False, "SetGUID " & MODULE_NAME & " (" & CStr(Erl) & ")", Err.Number, Err.Source, Err.Description)
End Sub

Public Sub TruncateGeodatabase(ByRef pApplication As IApplication)
    On Error GoTo ErrorHandler
    '
    Dim pGxApplication As esriCatalogUI.IGxApplication
    Dim pStatusBar As esriSystem.IStatusBar
    Dim pMouseCursor As esriFramework.IMouseCursor
    '
    Dim pGxObject As esriCatalog.IGxObject
    Dim pGxDatabase As esriCatalog.IGxDatabase
    Dim pGxDataset As esriCatalog.IGxDataset
    Dim pWorkspace As esriGeoDatabase.IWorkspace
    Dim pDataset As esriGeoDatabase.IDataset
    Dim pEnumDataset As esriGeoDatabase.IEnumDataset
    Dim pDataset_FD As esriGeoDatabase.IDataset
    Dim pEnumDataset_FD As esriGeoDatabase.IEnumDataset
    '---------------------------------
    ' Set GxApplication and StatusBar
    '---------------------------------
    Set pGxApplication = pApplication
    Set pStatusBar = pApplication.StatusBar
    '---------------------
    ' Change Mouse Cursor
    '---------------------
    Set pMouseCursor = New esriFramework.MouseCursor
    Call pMouseCursor.SetCursor(2)
    '
    Set pGxObject = pGxApplication.SelectedObject
    If TypeOf pGxObject Is IGxDatabase Then
        Set pGxDatabase = pGxObject
        Set pWorkspace = pGxDatabase.Workspace
        Set pEnumDataset = pWorkspace.Datasets(esriDTAny)
        Set pDataset = pEnumDataset.Next
        Do Until pDataset Is Nothing
            Select Case pDataset.Type
            Case esriDTFeatureDataset
                Set pEnumDataset_FD = pDataset.Subsets
                Set pDataset_FD = pEnumDataset_FD.Next
                Do Until pDataset_FD Is Nothing
                    If pDataset_FD.Type = esriDTFeatureClass Then
                        pStatusBar.Message(0) = "Trucating " & pDataset_FD.Name
                        Call TruncateObjectClass(pDataset_FD)
                    End If
                    Set pDataset_FD = pEnumDataset_FD.Next
                Loop
            Case esriDTFeatureClass, esriDTTable
                Call TruncateObjectClass(pDataset)
                pStatusBar.Message(0) = "Trucating " & pDataset.Name
            End Select
            Set pDataset = pEnumDataset.Next
        Loop
    Else
        If TypeOf pGxObject Is esriCatalog.IGxDataset Then
            Set pGxDataset = pGxObject
            Set pDataset = pGxDataset.Dataset
            Select Case pGxDataset.Type
            Case esriGeoDatabase.esriDatasetType.esriDTFeatureClass, esriGeoDatabase.esriDatasetType.esriDTTable
                '--------------------------------------
                ' Truncate Selected FeatureClass/Table
                '--------------------------------------
                pStatusBar.Message(0) = "Trucating " & pDataset.Name
                Call TruncateObjectClass(pDataset)
            Case esriGeoDatabase.esriDatasetType.esriDTFeatureDataset
                '--------------------------------------------------------
                ' Truncate FeatureClasses Within Selected FeatureDataset
                '--------------------------------------------------------
                Set pEnumDataset_FD = pDataset.Subsets
                Set pDataset_FD = pEnumDataset_FD.Next
                Do Until pDataset_FD Is Nothing
                    If pDataset_FD.Type = esriDTFeatureClass Then
                        pStatusBar.Message(0) = "Trucating " & pDataset_FD.Name
                        Call TruncateObjectClass(pDataset_FD)
                    End If
                    Set pDataset_FD = pEnumDataset_FD.Next
                Loop
            Case Else
                '
            End Select
        Else
            MsgBox "Please select Geodatabase, FeatureDataset, FeatureClass or Table", vbExclamation
        End If
    End If
    '-----------------
    ' Clear StatusBar
    '-----------------
    pStatusBar.Message(0) = ""
    '---------------------
    ' Restore MouseCursor
    '---------------------
    Set pMouseCursor = Nothing
    '
    Exit Sub
ErrorHandler:
    Call HandleError(False, "TruncateGeodatabase " & MODULE_NAME & " (" & CStr(Erl) & ")", Err.Number, Err.Source, Err.Description)
End Sub

Private Sub TruncateObjectClass(ByRef pDataset As esriGeoDatabase.IDataset)
    On Error GoTo ErrorHandler
    '
    Dim pTable As esriGeoDatabase.ITable
    Dim pQueryFilter As esriGeoDatabase.IQueryFilter
    Dim pWorkspace As esriGeoDatabase.IWorkspace
    Dim pWorkspaceEdit As esriGeoDatabase.IWorkspaceEdit
    '
    Set pTable = pDataset
    Set pQueryFilter = New esriGeoDatabase.QueryFilter
    '
    If pTable.RowCount(pQueryFilter) > 0 Then
        Set pWorkspace = pDataset.Workspace
        Set pWorkspaceEdit = pWorkspace
        Call pWorkspaceEdit.StartEditing(False)
        Call pWorkspaceEdit.StartEditOperation
        '
        Call pTable.DeleteSearchedRows(pQueryFilter)
        '
        Call pWorkspaceEdit.StopEditOperation
        Call pWorkspaceEdit.StopEditing(True)
    End If
    '
    Exit Sub
ErrorHandler:
    Call HandleError(False, "TruncateGeodatabase " & MODULE_NAME & " (" & CStr(Erl) & ")", Err.Number, Err.Source, Err.Description)
End Sub