Запись данных в таблицы слоя
-
Изучаем способы записи данных в таблицы слоя с точки зрения быстродействия.
Рассмотрены варианты простой (по одной записи) и буферизованной записи данных в базу.
' ActiveX enumeration values definitions start (do not change!)
Const eNetworkArcs = 2
Const ForWriting = 2
Const TristateTrue = -1
' ActiveX enumeration values definitions end
'**************************************************************************
'Процедура обновления записей поодиночке
'**************************************************************************
Sub BeginEndSingle
'Объект для вывода в окно сообщений
Set Out = Zulu.OpenOutputChannel("")
'Очищаем окно сообщений
Out.Clear
'Фиксируем начало процесса
Out.Put "Start" + CHR(10)
'Получаем активный слой текущей карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Создаем объект для базы данных
Set db = CreateObject("Zb.ZbDatabase")
'Открываем базыу данных для типа с ID=2
db.Open L.ObjectTypes.Item(2).BaseName
'Получаем линейные объекты сети
Set NWObjects = L.NetworkObjects(eNetworkArcs)
'По всем участкам сети
For i = 1 To NWObjects.Count
'Получаем i-й участок
Set NWObject = NWObjects.Item(i)
'Записываем для текущего участка в два поля значения ID начального и конечного узлов
db.UpdateBaseRecord NWObject.Key, "Begin_uch" + CHR(10) + "End_uch", CStr(NWObject.KeyBegin) + CHR(10) + Cstr(NWObject.KeyEnd)
Next
'Фиксируем завершение процесса
Out.Put "Finish" + CHR(10)
MsgBox "Finish"
End Sub
'**************************************************************************
'Процедура пакетного обновления записей через ASCII файл
'**************************************************************************
Sub BeginEndFromASCII
'Объект для вывода в окно сообщений
Set Out = Zulu.OpenOutputChannel("")
'Очищаем окно сообщений
Out.Clear
'Фиксируем начало процесса
Out.Put "Start" + CHR(10)
'Создаем объект для работы с файлами
Set fc = CreateObject("Scripting.FileSystemObject")
'Открываем (создаем) файл на запись в формате UNICODE
Set File = fc.OpenTextFile("c:\temp\BeginEndFromASCII.tmp",ForWriting, true, TristateTrue)
'Получаем активный слой текущей карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Создаем объект для базы данных
Set db = CreateObject("Zb.ZbDatabase")
'Открываем базыу данных для типа с ID=2
db.Open L.ObjectTypes.Item(2).BaseName
'Получаем линейные объекты сети
Set NWObjects = L.NetworkObjects(eNetworkArcs)
'По всем участкам сети
For i = 1 To NWObjects.Count
'Получаем i-й участок
Set NWObject = NWObjects.Item(i)
'Создаем строку для текущего участка через запятую ID участка, ID начального и ID конечного узла
S = Cstr(NWObject.Key) + ",""" + CStr(NWObject.KeyBegin) + "人民共和"",""" + CStr(NWObject.KeyEnd) + "고려"""
'Записываем строку в файл
File.WriteLine(S)
Next
'Закрываем файл
File.Close
'Записываем данные ASCII файла в указанные поля базы данных для указанных в файле ID
L.UpdateFromAscii db, "c:\temp\BeginEndFromASCII.tmp", "Begin_uch" + CHR(10) + "End_Uch"
'Фиксируем завершение процесс процесса
Out.Put "Finish" + CHR(10)
MsgBox "Finish"
End Sub
Последнее обновление — 02.11.2020 14:10:37