All Forums
 Категория Visio
 Форум Вопросы и ответы
 Запуск аддона с параметрами: что и как?
Author Previous Topic Topic Next Topic  

Sabin

11 Posts

Posted - 12/15/2004 :  16:05:52
Писал проект взаимодействия с базой данных и уперся в одну неприятную вещь.
Итак, имеем shape. Руками при помощи Tools\Add-ons\Visio Extras\Link to Database... связываем запрос из базы данных с shape, отвечая на вопросы диалогов аддона. Далее правой кнопкой мыши на shape выбираем Select Database Records и начинаем работать с данными из базы в рамках фигуры.
Вопрос, как связать базу с фигурой и выбрать запись в базе автоматически на VBA?
Смотрел функции RunAddon() и RunAddonWArgs(), но ни списка аддонов, ни их параметров не нашел.

Tumanov

Russia
1198 Posts

Posted - 12/15/2004 :  21:39:58
При работе с Add-on Link to Database... формируется куча параметров и записывается в шейп на случай будущей связи с базой (вообще-то не очень большая кучка - умещается в User-defined Cells ODBCConnection и ODBCChecksum.
Попутно создается меню шейпа, в которой записывается в том числе и функция вызова аддона =RUNADDON("Database Select Record").
То есть видно, что этот аддон вызывается без параметров (не считая стандартных индексов приложения, документа, страницы и шейпа).
Стандартные параметры командной строки описаны, например, в SDK Visio:
"If a shape formula uses a runaddon function to run a program when it is evaluated, the Visio engine sends a command string to the program, such as the following:
/visio=instanceHandle /doc=docIndex /page=pagIndex /shape=NameID"

При работе аддон Database Select Record явно должен использовать данные, записанные в ODBCConnection, чтобы приконнектиться к нужной таблице. Больше ему скорее всего ничего и не надо.

Однако, разбираться с этими аддонами, пытаясь программой VBA имитировать их работу, - скорее всего неблагодарное занятие. Они предназначены именно для ручного взаимодействия с базой, используют свой специальный механизм передачи данных между собой через шейп. Наверное проще будет не подражать им, а взять любую книжку, где описана работа на VB с базами данных и почитать ее...
Go to Top of Page

Sabin

11 Posts

Posted - 12/15/2004 :  23:03:40
Спасибо за ответ. В голове куча мыслей, ща попробую разложить и написать. Итак...

quote:
При работе с Add-on Link to Database... формируется куча параметров и записывается в шейп на случай будущей связи с базой (вообще-то не очень большая кучка - умещается в User-defined Cells ODBCConnection и ODBCChecksum.

Это я увидел, причем увидел только сейчас, что в User.ODBCConnection лежит огромная строка, с утра я думал, что там только на базу ссылка, а остальное как-то иначе отдается. Затупил.

quote:
Попутно создается меню шейпа, в которой записывается в том числе и функция вызова аддона =RUNADDON("Database Select Record").
То есть видно, что этот аддон вызывается без параметров (не считая стандартных индексов приложения, документа, страницы и шейпа).

Здесь немного иначе у меня, отсюда непонятки. Действие Select Database Record у меня в ShapeSheet'е выглядит как RUNADDON("DBS"). Что такое DBS? Я понимаю, что это DataBaseSelect, но почему именно так? Какое внутреннее имя?

quote:
Стандартные параметры командной строки описаны, например, в SDK Visio:
"If a shape formula uses a runaddon function to run a program when it is evaluated, the Visio engine sends a command string to the program, such as the following:
/visio=instanceHandle /doc=docIndex /page=pagIndex /shape=NameID"

Где взять Visio 2003 SDK? Как всегда, microsoft.com?

quote:
Однако, разбираться с этими аддонами, пытаясь программой VBA имитировать их работу, - скорее всего неблагодарное занятие. Они предназначены именно для ручного взаимодействия с базой, используют свой специальный механизм передачи данных между собой через шейп. Наверное проще будет не подражать им, а взять любую книжку, где описана работа на VB с базами данных и почитать ее...

Возможно ты и прав, но:
1) когда я попробовал написать так же, как пишу в MsAccess, то не нашел объектов соответствующих, возможно плохо искал
2) они уже сделали за меня кучу работы, мне же осталось только сформировать параметры и запустить аддон, не вижу причин, почему это не сделать
3) мне очень удобно это сделать именно так, ибо тогда я смогу работать и автоматически и мануально, гибкость какая-то получается

В любом случае спасибо за ответ, он меня просветлил немного. Я уже вижу куда мне копать дальше.
Go to Top of Page

Sabin

11 Posts

Posted - 12/16/2004 :  00:28:06
Немного разобрался с чем хотел. Автоматическое подключение базы меня не интересует, а вот автоматическое обновление данных из базы, подключенной к фигуре меня интересует. В запросе с данными есть поля, одно из них ключевое, кто с базами работает, то поймет. Так вот если изменить ключевое поле, а потом руками сделать Refresh Shape Properties (ShapeSheet это выглядит как RunAddon("DBR")), то данные нормально обновляются. Как раз то, что нужно.

Теперь вопрос, т.к. RunAddon("DBR") запускается без аргументов, то меня интересует, как передать те самые дефольтные параметры, которые от меня скрыты?

Я так понимаю об этом в SDK написано? Где взять?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/16/2004 :  19:45:20
С нормальным Аддоном (.exe) я это делал вот так:
'Imitate call rn20.exe from shape menu
Dim s As String
s = " /doc=" & gvsoApp.ActivePage.Document.Index & _
" /page=" & gvsoApp.ActivePage.Index & _
" /shape=" & Shape.NameID & _
" /mode=2"
gvsoApp.Addons("rn20.exe").Run s
Этот спрятан в какой-то библиотеке, тем не менее проходит вот такой вызов
(в Вашем случае будет "DBS"):
Sub ttt()
Dim s As String
s = " /doc=" & ActivePage.Document.Index & _
" /page=" & ActivePage.Index & _
" /shape=" & ActivePage.Shapes(1).NameID & _
" /mode=2"
Application.Addons("Database Select Record").Run s
End Sub

SDK не помню, где. Сам искал через поисковик "Visio SDK 2003". То ли в первой, то ли во второй строке уже будет то, что надо.
Go to Top of Page

Sabin

11 Posts

Posted - 12/17/2004 :  08:15:13
Появились две книги по визио.
"Wordware - Learn Microsoft Visio 2002 for the Advanced User.pdf"
"Wordware - Learn to Diagram with Microsoft Visio 2002.pdf"

Лежат на
http://ezshare.de/files-en/182876/visio1.rar.html
http://ezshare.de/files-en/182989/visio2.rar.html
соответственно 5 и 8 метров.

Может есть смысл их вытянуть и на сайте положить?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/17/2004 :  20:05:42
Перекачивать такие объемы, да еще и два раза - это не для меня
Ссылочку можно будет повесить...
Go to Top of Page

Sabin

11 Posts

Posted - 12/18/2004 :  14:11:05
Это обменник, лежать оно там долго не будет.
Книжки скачал, читаю, ибо кроме них информации нету.
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)