RUS  ENG 

Получение семантических данных слоя (VBScript)

20 июня 2016

Получение семантических данных слоя (VBScript)

Sub ReadDatabaseData

'Хотим, например, прочесть значение поля "Путь, пройденный от источника, м" - "Dist"
'для потребителя тепловой сети с ключом ID = 250

'Текущая активная карта
Set Doc = Zulu.ActiveMapDoc

'Активный слой текущей карты
Set L = Doc.Layers.Active


' ПЕРВЫЙ СПОСОБ ЧЕРЕЗ ОБРАЩЕНИЕ К БАЗЕ ДАННЫХ

'Создаем объект для базы данных
Set Db = CreateObject("zb.database")

'Открываем базу данных для типа 3 (потребитель тепловой сети)
Set Type3 = L.ObjectTypes.Item(3)

If TypeName(Type3) = "IObjectType" Then

If Db.Open(Type3.BaseName) = True Then


'Запрашиваем запись для ключа 250
Set Ds = Db.SelectByKey(250)

If TypeName(Ds) = "IZbDataset" Then

'Индекс для поля "Dist"
Num = Ds.GetFieldIndexByName(0, "Dist")

If Ds.MoveFirst = True Then

'Выводим результат
MsgBox Ds.FieldValue(Num)

End If

End If

End If

End If


' ВТОРОЙ СПОСОБ ЧЕРЕЗ SQL ЗАПРОС К СЛОЮ

Set Result = L.ExecSQL("SELECT Dist WHERE Sys = 250")

If TypeName(Ds) = "IZbDataset" Then

If Ds.MoveFirst = True Then

MsgBox Result.DataSet.FieldValue(0)

End If

End If


' ПОЛУЧЕНИЕ ЧЕРЕЗ SQL ЗАПРОС К СЛОЮ ОБЪЕКТА С МАКСИМАЛЬНЫМ ЗНАЧЕНИЕМ Dist ДЛЯ ВСЕХ ВЫДЕЛЕННЫХ ОБЪЕКТОВ

Set Result = L.ExecSQL("SELECT Sys, Dist WHERE Dist=(SELECT MAX(Dist) WHERE Geometry.Selected()=1)")

Set ds = Result.DataSet

If TypeName(Ds) = "IZbDataset" Then

If Ds.MoveFirst = True Then

MsgBox "Sys: " + Result.DataSet.FieldValue(0) + ", Dist: " + Result.DataSet.FieldValue(1)

End If

End If

End Sub

Скачать пример (2.02 КБ)


Возврат к списку

Последнее обновление — 27.12.2018 16:31:13