Открывает базу данных слоя по заданному ID и имени запроса.
Visual Basic:
Function OpenDatabase(BaseID As Long, QueryName As String) As ZbDatabase
BaseID - ID базы слоя
QueryName - имя запроса базы
Метод возвращает объект ZbDatabase.
Какие базы есть у слоя и какие у них ID, показывает коллекция Bases. Базу типового объекта указывает свойство BaseID типа из коллекции ObjectTypes.
Если QueryName - пустая строка, открывается основной запрос базы. Имя существующего запроса дает тот же результат, а имя, которого в базе нет, - Nothing без исключения, так что ответ стоит проверять.
У открытой базы Name - путь к файлу данных слоя (с расширением .d00, .d01 и так далее), UserName - название, а записи читаются набором SelectAll.
Visual Basic:
Sub Layer_OpenDatabase 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active S = "Баз у слоя: " & L.Bases.Count 'Открываем базу первого типа объектов и смотрим ее состав Set T = L.ObjectTypes.GetItemByIndex(0) Set DB = L.OpenDatabase(T.BaseID, "") If DB Is Nothing Then S = S & vbCrLf & "база типа " & T.Name & " не открылась" Else S = S & vbCrLf & "тип " & T.Name & ", база " & DB.UserName S = S & vbCrLf & "таблиц: " & DB.Tables.Count & ", запросов: " & DB.Queries.Count S = S & vbCrLf & "полей в записи: " & DB.SelectAll.FieldCount End If MsgBox S End SubPython:
import zulu def Macro_Layer_OpenDatabase(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active print("Баз у слоя:", L.Bases.Count) # Открываем базу первого типа объектов и смотрим ее состав t = L.ObjectTypes.GetItemByIndex(0) db = L.OpenDatabase(t.BaseId, "") if db is None: print("база типа", t.Name, "не открылась") else: print("тип", t.Name, ", база", db.UserName) print("таблиц:", db.Tables.Count, ", запросов:", db.Queries.Count) # SelectAll - метод, в python его вызывают со скобками print("полей в записи:", db.SelectAll().FieldCount)