OpenDatabase method (Layer)

Открывает базу данных слоя по заданному ID и имени запроса.

Применяется к:

Layer

Синтаксис:

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 Sub

Python:

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)