Получение семантических данных слоя (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
Последнее обновление — 27.12.2018 16:31:13