Author |
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 с базами данных и почитать ее... |
|
|
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) мне очень удобно это сделать именно так, ибо тогда я смогу работать и автоматически и мануально, гибкость какая-то получается
В любом случае спасибо за ответ, он меня просветлил немного. Я уже вижу куда мне копать дальше. |
|
|
Sabin
11 Posts |
Posted - 12/16/2004 : 00:28:06
|
Немного разобрался с чем хотел. Автоматическое подключение базы меня не интересует, а вот автоматическое обновление данных из базы, подключенной к фигуре меня интересует. В запросе с данными есть поля, одно из них ключевое, кто с базами работает, то поймет. Так вот если изменить ключевое поле, а потом руками сделать Refresh Shape Properties (ShapeSheet это выглядит как RunAddon("DBR")), то данные нормально обновляются. Как раз то, что нужно.
Теперь вопрос, т.к. RunAddon("DBR") запускается без аргументов, то меня интересует, как передать те самые дефольтные параметры, которые от меня скрыты?
Я так понимаю об этом в SDK написано? Где взять? |
|
|
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". То ли в первой, то ли во второй строке уже будет то, что надо. |
|
|
Sabin
11 Posts |
|
Tumanov
Russia
1198 Posts |
Posted - 12/17/2004 : 20:05:42
|
Перекачивать такие объемы, да еще и два раза - это не для меня Ссылочку можно будет повесить... |
|
|
Sabin
11 Posts |
Posted - 12/18/2004 : 14:11:05
|
Это обменник, лежать оно там долго не будет. Книжки скачал, читаю, ибо кроме них информации нету. |
|
|
|
Topic |
|
|
|