All Forums
 Категория Visio
 Форум Вопросы и ответы
 Сохранение данных.
Author Previous Topic Topic Next Topic  

SaSa

27 Posts

Posted - 02/06/2004 :  14:13:09
Тут вот какой вопрос. Не подскажете как проще всего в визио сохранять вместе с документом некоторый объем данных. Хотель бы что бы документ работаал с БД на SQL Server но в ОФЛАЙН режиме конектися к серверу только по нажатию кнопочки обновить, и сохранял в документе полученные данные. Я думал что можно у документа из VB добавлять поля User.ROW_ вписывать туда но наверно количество таких ячек будет не очень велико или их можно добавлять сотнями? И потом мне этот список хотелось бы выводить в виде списка выбора в кастомных свойствах у всех шейпов документа. То есть так чтобы можно было как нибуть сослаться на этот список целиком , а не на конкретную ячейку.

Спасибо :)

Tumanov

Russia
1198 Posts

Posted - 02/06/2004 :  15:22:51
В User.ROW_ можно вписывать текстовую строку. Значит туда можно поместить не одно поле данных, а фрагмент или целый документ в XML формате. Если в БД у Вас простая структура типа одной таблички, то конвертор будет совсем простым.
Go to Top of Page

SaSa

27 Posts

Posted - 02/11/2004 :  17:16:42
Да спасибо.. в строку действительно входит большой объем данных но вот теперь вопрос как сослаться на них из шейпа. Т.К данные мне нужно хранить в документе, а не в странице т.к страницы имеют свойство добавляться-удаляться то я решил создать Application.ActiveDocument.DocumentSheet.AddNamedRow visSectionUser, "Data", visTagComponent. Вот но, если бы я писал это в страницу то в любом шейпе я бы мог сослаться на эти данные "Page(1)!User.Data", а в моем случае как на них сослаться ?
Спасибо.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/11/2004 :  18:49:42
Microsoft в аналогичном случае сажает в Document Stencil специальный шейп и загоняет данные в него. Ссылка может быть примерно такой:
s = Application.Documents(Ind).Masters("Name").Shapes(1).Cells("User.specdata").Formula
Наверное, в этом есть какой-то смысл (все-таки у них опыт больше).
Go to Top of Page

SaSa

27 Posts

Posted - 02/12/2004 :  10:47:57
Спасибо за ответ, но это не совсем то, что я хотел спросить. В форуме кто-то уже спрашивал, как у шейпа создать список выбора из БД. У меня похожая задача. Но я хочу не подставлять готовый статический набор данных во все шейпы, а вставить ссылку на данные, типа "=ThePage!User.Data". Кода я писал данные в страницу то ссылка "=ThePage!User.Data" работала на ура. Но почему-то когда я пишу в документ "ActiveDocument.DocumentSheet.Cells("User.Data").Formula" в этом случае фокус с "=TheDoc!User.Data" не проходит, значение этой форулы в ячейке всегда получается "False" хотя если я обращаюсь из VBA к этому полю "MsgBox Application.ActiveDocument.DocumentSheet.Cells("User.Data").Formula то он мне выдает именно то, что нужно. А других способов обращения к данным, принадлежащим всему документу кроме “TheDoc” я не знаю. Как обратится из таблицы свойств к Documents(Ind).Masters("Name").Shapes(1).Cells("User.specdata") я тоже не понимаю.
Может быть, я каким то образом умудряюсь работать с разными документами? ActiveDocument из VBA работает с одним документом, а TheDoc! подразумевает какой то другой? Такое возможно?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/12/2004 :  15:59:29
Может дело не в ссылках, а где-то кавычки пропустили или еще какая синтаксическая ошибка.
Вот сейчас проверил. Записал в User с именем Data значение ="проверка" и сослался на нее из шейпа =TheDoc!User.Data
Все передается нормально.
Go to Top of Page

SaSa

27 Posts

Posted - 02/13/2004 :  11:13:05
самому удивительно... похоже что я с разными документами что ли работаю пишу в VB
ActiveDocument.Pages(1).PageSheet.Cells("User.Data").Formula = """ nttt """
ActiveDocument.DocumentSheet.Cells("User.Data").Formula = """ nttt """

У шейпа задал 2 юзерских поля в одном =TheDoc!User.Data в другом поле
=ThePage!User.Data все пишет синеньким типа формула правлельная прошу показать значения там где Page получается "nttt",а там где Doc "False" Ничего не понимаю.. из VB соответственно в обоих ячейках правильно значение и в документе и в странице. Может быть ActiveDocument <> TheDoc???
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/13/2004 :  16:27:12
Ну, в общем случае - это действительно разные вещи.
TheDoc дает ссылку на тот рисунок, которому принадлежит страница с данным шейпом.
ActiveDocument - это один из документов, открытых в данный момент в Visio. А их может быть несколько.
Посмотрите, что выведется из VB по MsgBox ActiveDocument.Name.
Можно в VB попробовать прямо указать нужный документ, типа Visio.Documents("Drawing1").DocumentSheet.Cells("User.Data").Formula = """ nttt """
Еще можно открыть шейп-лист вручную и посмотреть, а пишется ли туда то, что Вам надо.
Go to Top of Page

SaSa

27 Posts

Posted - 02/18/2004 :  11:06:21
Спасибо за ответ. Про проблему с “TheDoc!” я разобрался. Если это интересно. Как я писал выше строки пользовательских свойств у документа создавались таким способом:

If ActiveDocument.DocumentSheet.CellExists("User.Data", 0) = 0 Then doc1.AddNamedRow visSectionUser, "Datat", visTagComponent

Оказывается если создавать новую сроку свойств так , то она получается доступна только из VB и в тоже время абсолютно не доступной из таблицы свойств шейпа. Проблема оказалась в “ visTagComponent” если указать тип создавай строки как “0”-“по умолчанию” то все начинает работать на ура. А с “ThePaes!” не было проблем, потому что такая строка в страницах уже была создана из шаблона, и из VB не создавалась.

Кстати вы рекомендовали посмотреть на шейп лист документа вручную. Может быть я тормоз, но я не знаю как посмотреть поля документа другим способом кроме как из VB т.к “таблицу фигур” visio мне показывает только для страницы? И ниже, а выше ??? Подскажите пожалуйста. :)
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/18/2004 :  15:50:40
View / Drawing Explorer / Drawing (корневой элемент) / Show ShapeSheet
Drawing Explorer - это вообще очень полезная вещь.
Go to Top of Page

SaSa

27 Posts

Posted - 02/19/2004 :  08:51:16
ВАУ!!! Сколько тут интереного:) Вот я и нашел, где спрятался один из источников вредной магии, который мне все портил:)
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)