' 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