Однозначно выделяет регионы, содержащие несколько полигонов в одном объекте следующий запрос:
Код: Выделить всё
Select * from Untitled where val(str$(ObjectInfo( obj, 21))) > 1 and  str$(ObjectInfo( obj, 1) ) = "7" into Selection
Browse * From Selection
Полигоны, содержащие дыры - из их числа. К сожалению, к таковым относятся и объекты просто, содержащие несколько полигонов. На пример, города, состоящие из нескольких частей или кварталов.
---
Когда мне пришлось решать такую же задачу, я ее делал в несколько частей:
1. создал в исследуемой таблице колонку с уникальным номером (что бы потом было к чему привязаться)
2. создал запрос на исследуемой таблице, в которую включил только три поля:
 - созданный уникальный номер
 - вычисляемое поле кол-во полигонов, входящих в объект = val(str$(ObjectInfo( obj, 21)))
 - вычисляемое поле площадь = Area(obj, "hectare")
с условием val(str$(ObjectInfo( obj, 21))) > 1 and  str$(ObjectInfo( obj, 1) ) = "7"
т.е. только те, которые состоят из нескольких регионов
3. сохранил это запрос как таблицу, затем открыл ее
4. выделил все объекты и применил Objects->Dissagregate
			
		
				
			 
- Clipboard01.gif (7.46 КБ) 7806 просмотров
 
5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов. 
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions"
			
		
				
			 
- Clipboard03.gif (7.45 КБ) 7806 просмотров
 
Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой:
			
		
				
			 
- Clipboard02.gif (3.88 КБ) 7805 просмотров
 
получается ТРИ объекта:
			
		
				
			 
- Clipboard04.gif (3.88 КБ) 7804 просмотра
 
т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить. 
