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

Vova

7 Posts

Posted - 03/25/2003 :  08:52:42
Необходимо формировать список выбора
в пользовательском поле Shape
из поля базы данных
Скажите пожалуйста, как это сделать?

Tumanov

Russia
1198 Posts

Posted - 03/25/2003 :  11:55:35
Тип поля должен быть установлен, например, в Fixed List, а в ячейку Format нужно подсунуть данные, выбранные из базы. Например, ="12;13;14" будет давать для выбора список из трех величин.
Go to Top of Page

Vova

7 Posts

Posted - 03/25/2003 :  13:17:10
Есть база данных по вентиляторам
Сложность в том,
что заранее не изветстено какие вентиляторы
есть в базе.
Тип вентилятора в списке выбора
должен форироваться динамически,
как только фугура вентилятора кладется на рабочий лист.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/25/2003 :  15:11:41
Ну, так и я об этом...
В обработчике события ShapeAdded коннектитесь к базе, выбираете список вентиляторов, формируете из типов вентиляторов текстовую строку (не "12;13;14", а "ВПГ-56-380; ПВ-250" или что там будет в базе) и эту строку засовываете в ячейку Format в секции пользовательских свойств в нужную строку. Лучше, если соответствующее свойство в мастер-шейпе уже есть - тогда надо только подсунуть значение в одну ячейку.
То есть как только Вы бросите шейп на лист, в нем уже появится сформированный список из базы. Далее уже ручками открываете свойства и выбираете нужную позицию.
Go to Top of Page

Vova

7 Posts

Posted - 03/31/2003 :  11:52:44
Где описывать обработчик ShapeAdded
и как его вызывать?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/01/2003 :  11:03:28
Обработчик будет вызываться сам, как только на страницу упадет шейп.
Чтобы его описать, нужно вызвать Microsoft Visual Basic (Tools / Macros / Visual Basic Editor), щелкнуть слева по ThisDocument, справа в списке объектов выбрать Document, а еще правее в списке событий выбрать ShapeAdded.
При этом на листе появится заготовка типа:
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)

End Sub
Впишите туда для проверки MsgBox, например:
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
MsgBox "Ой, Добавилось!"
End Sub
Теперь возвращайтесь на страницу рисунка и добавьте любой шейп или просто проведите линию и наблюдайте, как срабатывает Ваш обработчик.
Go to Top of Page

Vova

7 Posts

Posted - 04/08/2003 :  10:51:11
Предположим есть процедура
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
nam = Shape.Name
If InStr(1, nam, "Вентилятор") > 0 Then
formatstroka = "ВОМД-24;ВОМ-18"
' здесь надо задать формат в соответствии с форматной строкой

End If
End Sub
Как задать программно формату ячейки форматную строку?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/08/2003 :  11:38:32
Пусть в трафарете имеется мастер-шейп, в котором определено пользовательское свойство: Label = Typ; Type = Fixed List (другие аргументы, в том числе и формат, не заполнены).
Тогда при премещении этого мастер-шейпа на лист (срабатывает данный обработчик) нужно будет в ячейку Format записать "ВОМД-24;ВОМ-18".
Если бы данные брались не из базы, а просто как текстовая константа, это делалось бы так:
Shape.Сells("prop.row_1.Format").Formula = """ВОМД-24;ВОМ-18"""
В Вашем же случае вместо константы в тройных кавычках нужно будет подсунуть строку, сформированную из всех возможных значений, полученных из базы.
Ну и, понятно, если пользовательских свойств несколько, то вместо prop.row_1 должна быть указана нужная строка.
Go to Top of Page

Vova

7 Posts

Posted - 04/08/2003 :  13:43:17
Пробовал добавить эту строку,
но к сожалению, возникает ошибка:
Run time error '438'
Object doesn't support this property or method
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/08/2003 :  14:29:16
Этот объект обязан поддерживать это свойство. Значит либо строка была не совсем такой, либо объект не совсем такой. Посмотрите шейп-лист этого шейпа. Проверьте, есть ли там секция Custom Properties, есть ли в ней строка Prop.Row_1, в которую Вы пытаетесть вводить данные.
Если все на месте и ситуация совсем безвыходная, шлите рисунок по адресу ttt@post.rzn.ru (только по возможности выбросьте все лишнее и заархивируйте), я посмотрю на месте, в чем ошибка.
Go to Top of Page

Vova

7 Posts

Posted - 05/05/2003 :  12:47:26
Предположим, что datPrimaryRS привязана к базе данных
тогда процедура обработки может выглядеть так
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
nam = Shape.Name
If InStr(1, nam, "Вентилятор") > 0 Then
Do Until datPrimaryRS.Recordset.EOF
If datPrimaryRS.Recordset!название = "ВОМД-24" Then
Shape.Cells("Prop.Row_3").Result = datPrimaryRS.Recordset!характеристика
End If
datPrimaryRS.Recordset.MoveNext
Loop
End If
End Sub
вопрос:
как из VISIO связывать datPrimaryRS с таблицей в базе данных?
база данных ACCESS
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/05/2003 :  15:15:17
как из VISIO связывать datPrimaryRS с таблицей в базе данных?

Да так же, как и из любого приложения на VBA. Например, через ADODB. Вот здесь datPrimaryRS связывается с таблицей tabl1 в базе db1.mdb, лежащей в C:\temp, и выбирает из нее поля название и характеристика из всех записей:

Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
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
End Sub
Go to Top of Page

Vova

7 Posts

Posted - 05/12/2003 :  13:34:08
База данных находится в том же каталоге,
что и рисунок VISIO.
Вопрос: как получить из VBA имя каталога
для вызова строки ADO коненекшн?
Функция CurDir дает: c:\windows\рабочий стол
dirstr = CurDir
constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dirstr & "\v.mdb;"
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)