All Forums
 Категория Visio
 Форум Вопросы и ответы
 помогите плиз с MYSQL+VISIO
Author Previous Topic Topic Next 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 брать.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 04/22/2005 :  12:00:36  Visit immortal's Homepage
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
Go to Top of Page

Sabin

11 Posts

Posted - 04/26/2005 :  00:42:59
Попытка вставить выше приведенный код в тело нового модуля с добавлением начала и окончания функции, а затем попытка исполнения - получаем ошибку:

Compile error: user-defined type not defined

Строка ниже выделена редактором, как содержащая ошибку.

cnn As New ADODB.Connection
Go to Top of Page

Sabin

11 Posts

Posted - 04/26/2005 :  09:53:58
Господа, не могу разобраться с проблемой. Из VBA при любой попытке объявить ADOBD-переменную получаю ошибку компилятора, описанную выше.
Есть стойкое подозрение, что что=то делаю не так.
Microsoft Visio 2003 Pro English
Service Pack 1 уже качаю

PS: Работать с базой приходится именно прямо из VBA, потому что используя стандартные возможности Visio на пару тысяч фигур получаем очень большое время для обновления информации из базы.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/26/2005 :  15:09:08
Библиотечку надо подключить. Например, Microsoft ActiveX Data Objects 2.5 Library.
Это в Tools / References
Go to Top of Page

Sabin

11 Posts

Posted - 04/26/2005 :  16:32:35
Вот оно! Я так и думал, что где-то что-то не объявлено правильно. Опыта мало в VBA пока. Большое спасибо за помочь. Работа вроде бы сдвинулась с места.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)