Author |
Topic |
|
Almas
5 Posts |
Posted - 04/21/2005 : 12:10:58
|
проблема: надо считывать по таймеру и обрабатывать скриптом значения из БД под MYSQL
что сделал: установил драйвер для MYSQL под VISIO 2003, создал Data Source, смог с помощью Database Wizard зацепить shape. Теперь у моего Shape на странице появились custom properties - поля моей таблицы. в идеале больше ничего и не надо - только бы добраться из VB до этих значений
что хочу узнать: 1 как вызывать функцию по таймеру 2 как из VB получать значения Custom Properties 3 может как то сделать проще ) |
|
Tumanov
Russia
1198 Posts |
Posted - 04/21/2005 : 23:50:31
|
1. Вариант работы с таймером описан у Алексея Ничкова в статье "Как создать будильник? Методы создания интерактивных объектов" http://www.prodigitall.narod.ru/articles/article6.html . Здесь использован периодический пересчет ShapeSheet. А можно в VB воспользоваться Control'ом под названием Timer - "A Timer control can execute code at regular intervals by causing a Timer event to occur". Это уже не из области Visio, а чистый VB.
2. Значения Custom Properties получаются примерно так: Set CellObj = shpObj.CellsSRC(visSectionProp, visRowProp + j, visCustPropsValue) s = CellObj.ResultStr(0) читает значение пользовательского свойства.
3. Еще должно быть можно наладить автоматическое обновление пользовательских свойств с помощью стандартных утилит работы с базами. Тогда уже не надо будет самому отслеживать изменения в базе, а достаточно зацепиться за обработчик события CellChanged. Изменение в базе будет приводить к изменению Custom Properties, а оно в свою очередь будет запускать Ваш макрос. Только я бы не сказал, что это проще получится... А можно вообще напрямую с базой работать без всяких визардов. Например так: 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 Это, правда, для другой базы (под руку такой пример подвернулся), но принцип такой же. Обычная работа с базой через ADODB. И совсем не обязательно Custom Properties использовать, можно данные прямо из RecordSet брать.
|
|
|
immortal
Russia
391 Posts |
Posted - 04/22/2005 : 12:00:36
|
quote: 2. Значения Custom Properties получаются примерно так: Set CellObj = shpObj.CellsSRC(visSectionProp, visRowProp + j, visCustPropsValue) s = CellObj.ResultStr(0) читает значение пользовательского свойства.
тоже, но по имени ячеек
Set CellObj = shpObj.CellsSRC("Prop.Row_1") s = CellObj.ResultStr(0) 'получаем значение s = CellObj.formulaU 'получаем формулу
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
Edited by - immortal on 04/22/2005 12:42:57 |
|
|
Sabin
11 Posts |
Posted - 04/26/2005 : 00:42:59
|
Попытка вставить выше приведенный код в тело нового модуля с добавлением начала и окончания функции, а затем попытка исполнения - получаем ошибку:
Compile error: user-defined type not defined
Строка ниже выделена редактором, как содержащая ошибку.
cnn As New ADODB.Connection |
|
|
Sabin
11 Posts |
Posted - 04/26/2005 : 09:53:58
|
Господа, не могу разобраться с проблемой. Из VBA при любой попытке объявить ADOBD-переменную получаю ошибку компилятора, описанную выше. Есть стойкое подозрение, что что=то делаю не так. Microsoft Visio 2003 Pro English Service Pack 1 уже качаю
PS: Работать с базой приходится именно прямо из VBA, потому что используя стандартные возможности Visio на пару тысяч фигур получаем очень большое время для обновления информации из базы. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/26/2005 : 15:09:08
|
Библиотечку надо подключить. Например, Microsoft ActiveX Data Objects 2.5 Library. Это в Tools / References |
|
|
Sabin
11 Posts |
Posted - 04/26/2005 : 16:32:35
|
Вот оно! Я так и думал, что где-то что-то не объявлено правильно. Опыта мало в VBA пока. Большое спасибо за помочь. Работа вроде бы сдвинулась с места.
|
|
|
|
Topic |
|