![]() |
Форум visio.getbb.ru | О форумах Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
20.07.2014 Пример приложения для двустороннего обмена данными с базой данных Геннадий Туманов.
31.03.2013  Using ODC Files with Visio David Parker.
29.08.2012  Creating Shape to Page Hyperlinks Automatically using Link Data to Shapes David Parker.
13.05.2009  Data Refresh on Open Chris Roth.
11.11.2007  Finding a Row in a Visio DataRecordset David Parker.
Как в VISIO 2002 автоматом создать карту сети?
Вас интересует технология работы с комплектом Enterprise Networks Tools или вопрос задается, так сказать, с нуля?
Если с нуля, то… Нужно просканировать сеть, т.е. идентифицировать, определить типы имеющихся в ней устройств, получить их список. Нужно также иметь комплект шейпов для отображения всех устройств, которые при этом обнаружатся (несколько сотен типов - маршрутизаторы, коммутаторы, серверы и т.д. разных производителей). Наконец, программку, которая все эти шейпы с трафаретов перенесет на лист и соединит.
Все эти средства есть в дополнении Enterprise Networks Tools стоимостью около $1000. Говорят, что размещение получается не всегда оптимальным, но это легко исправляется.
Если задачи не глобальные, а попроще (например нужно только не спутать сервер с принтером) и сеть не слишком большая, то похожие компоненты можно написать и самому. Набор трафаретов будет попроще, сканер напишет практически любой программист, а для отображения нужен простейший алгоритм размещения и знакомство с объектной моделью Visio.
Как визуализировать информацию из базы данных?
Я написал программу, опрашивающую по SNMP устройства сети и заносящую эту информацию в базу данных(ODBC). Теперь мне нужно визуализировать в Visio эту информацию. Вы не подскажете, как это можно сделать?
Принципы визуализации следующие:
1. У вас должен быть заготовлен трафарет с нужными мастер-шейпами. В простейшем случае это Basic Network, в более сложных их существуют десятки для самых разнообразных сетевых устройств. Мастер-шейпы на трафарете адресуются по именам или индексам.
2. Из базы выбирается очередная строка; там должно быть имя или индекс имеющегося мастер-шейпа. Берется нужный мастер и укладывается на страницу рисунка.
3. Точно также берется и укладывается коннектор.
4. Каждый конец коннектора подцепляется к нужным точкам.
И так далее по всей базе. А вот иллюстрация (работа с базой опущена). Здесь рисуются два узла сети. Причем в данном случае трафарет Basic Network Shapes 3D.vss считается уже открытым (вручную). Это можно записать в качестве макроса и выполнить.
Sub Example()
'предположим нужно разместить сервер и рабочую станцию
'Цепляемся за открытый! трафарет Basic Network Shapes 3D.vss, чтобы можно было
оперировать его шейпами
Set stnObj = Documents("Basic Network Shapes 3D.vss")
'Выбираем с трафарета шейп с именем Server (там такой есть)
Set mastObj = stnObj.Masters("Server")
'Сажаем его под именем shpObj1 в точку с координатами 2, 10 на активную старницу
Set shpObj1 = ActivePage.Drop(mastObj, 2, 10)
'Подпишем его
shpObj1.Text = "Хороший сервер"
'Поблизости делаем рабочую станцию из мастер-шейпа Workstation
Set mastObj = stnObj.Masters("Workstation")
Set shpObj2 = ActivePage.Drop(mastObj, 5, 8)
shpObj2.Text = "Так себе станция"
'Теперь нужно добавить коннектор. Берем для этой цели Bottom to Top Angled
Set mstObjConnector = stnObj.Masters("Bottom to Top Angled")
Set shpObjConnector = ActivePage.Drop(mstObjConnector, 0, 0)
'Прячем его, чтобы не перекрывал основные шейпы
shpObjConnector.SendToBack
'И подсоединяем началом к серверу
shpObjConnector.Cells("BeginX").GlueTo shpObj1.Cells("Connections.X1")
'а концом к рабочей станции
shpObjConnector.Cells("EndX").GlueTo shpObj2.Cells("Connections.X1")
End Sub
Как формировать список выбора по данным из базы?
Есть база данных по вентиляторам. Сложность в том, что заранее не известно какие вентиляторы есть в базе. Тип вентилятора в списке выбора должен формироваться динамически, как только фигура вентилятора кладется на рабочий лист.
В обработчике события ShapeAdded коннектитесь к базе, выбираете список вентиляторов, формируете из типов вентиляторов текстовую строку (не "12;13;14", а "ВПГ-56-380; ПВ-250" или что там будет в базе) и эту строку засовываете в ячейку Format в секции пользовательских свойств в нужную строку. Лучше, если соответствующее свойство в мастер-шейпе уже есть - тогда надо только подсунуть значение в одну ячейку.
То есть, как только Вы бросите шейп на лист, в нем уже появится сформированный список из базы. Далее уже ручками открываете свойства и выбираете нужную позицию.
как из VISIO связывать Recordset с таблицей в базе данных?
Как из VISIO связывать datPrimaryRS с таблицей в базе данных?
База данных ACCESS
Да так же, как и из любого приложения на VBA. Например, через ADODB. Вот здесь datPrimaryRS связывается с таблицей tabl1 в базе db1.mdb, лежащей в C:\temp, и выбирает из нее поля название и характеристика из всех записей:
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
Dim cnn As New ADODB.Connection
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= C:\temp\db1.mdb;"
Dim datPrimaryRS As New ADODB.Recordset
datPrimaryRS.Open "tabl1", cnn, adOpenKeyset, adLockOptimistic, adCmdTable
datPrimaryRS.MoveFirst
While Not datPrimaryRS.EOF
MsgBox datPrimaryRS!название & " " & datPrimaryRS!характеристика
datPrimaryRS.MoveNext
Wend
datPrimaryRS.Close
cnn.Close
End Sub
Как изменить размеры шейпов по данным Excel?
Хотелось бы из VBA екселевского изменить размеры шейпов... по данным того же екселя.
Я что то не понимаю в иерархии объектов Visio, потому что ни как не могу найти к чему относиться свойство height, отвечющее за высоту шейпа....
вот:
pagsObj.Item(1).Shapes.Item("Vertical text 3-D bar blue.1")....height=3 что поставить вместо точек?
Можно, например, так:
pagsObj.Item(1).Shapes.Item(1).Cells("height").Formula = 3
Здесь height, как ячейка.
Visio и MS SQL
Как в особых свойствах шаблонов, к которым мы получаем доступ по правой кнопке мышки, выбрав Proterties, определенному свойству сопоставить таблицу базы данных MS SQL ?
Т.е. необходимо сделать так, чтобы на форме "Выбор спецпараметров", которая появляется при нажатии кнопки "Назначить..." в списке типов был бы тип "Прикрепленный список" или один из существующих типов списка, но в качестве значений выбирать поле из выбранной таблицы базы MS SQL, а не задавать этот список вручную в этом поле ?
Другими словами, я хочу в качестве значений combo box для выбора получать значения из определенного поля некоего справочника базы MS SQL.
Сначала терминология (а то мы не поймем друг друга):
Шаблон - это заготовка для чертежа Visio. То есть файл с рисунком
Трафарет - поляна слева, с которой мы перетаскиваем мастер-шейпы (или мастера) на рисунок.
Шейп - это тот объект, который мы перетащили с трафарета на рисунок или нарисовали.
Во-первых, без VBA Ваша задача, по-моему, не получится.
Во-вторых, нужно решить, когда и насколько часто "заряжать" шейпы списками.
Возможно достаточно прописать списки в мастер-шейпах в трафарете.
Возможно списки должны обновляться при открытии документа (рисунка) или по специальной кнопке.
В каждом шейпе должен быть свой список или в шейпах одинакового типа и списки одинаковые? В этом случае достаточно менять список в мастер-шейпе в трафарете документа (Document Stencil) - изменение отразится во всех шейпах-экземплярах.
Ну и т.д.
А само техническое исполнение функции просто - связаться с базой, выполнить Select, перебрать строки RecordSet'а, формируя из полей строку с разделителями и засунуть получившуюся строку в нужную ячейку шейп-листа (ShapeSheet) шейпа или мастер-шейпа. Тип поля должен быть Fixed List, а строка засовывается в ячейку Format.
Огромное спасибо. Все получилось. Я прописал список в мастер-шейпе в трафарете и обновляю его при открытии документа.