![]() |
Форум visio.getbb.ru |
О форумах
Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
02.11.2022
20.07.2014
31.03.2013
29.08.2012
13.05.2009
11.11.2007
Как в 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.
Огромное спасибо. Все получилось. Я прописал список в мастер-шейпе в трафарете и обновляю его при открытии документа.