Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 19 мар 2024, 06:13

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 13 июл 2018, 16:43 
Не в сети

Зарегистрирован: 23 июн 2018, 16:21
Сообщений: 6
Использую Visio c: 2018
Уровнь квалификации: Не владею
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Стоит задача организовать двустороннюю связь между VISIO и внешней БД (Использую MS SQL). Связал образец одной из фигур из списка избранных с базой с помощью "Мастера баз данных". Теперь нужно что бы при размещении новой фигуры, в базу подтягивался уникальной итендификатор для каждой фигуры, присваиваемый автоматически в самой VISIO, в качестве первичного ключа. В таблице свойств фигуры такого не нашел, но зато наткнулся на функцию ID(), которая судя по описанию, возвращает уникальный ID фигуры в виде числа. Создал поле данных для фигуры и прописал для него формулу : "=ID()" в ячейке таблицы свойств. Вроде работает как задумывалось и в созданное поле "Данных фигуры" подтягивается нужное значение:
Изображение

Но при попытке автоматически передать это значение как первичный ключ для записи в БД MS SQL возникает вот такая ошибка:
Изображение

Если я правильно понял, это возникает в результате того, что во внешнюю БД передается сама формула, а не то значение которая она возвращает. Подскажите пожалуйста, что делаю не так? Заранее благодарю.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 13 июл 2018, 17:22 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2251
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
Если я правильно понял, это возникает в результате того, что во внешнюю БД передается сама формула, а не то значение которая она возвращает.

Не уверен, что это так...
Но это можно проверить. Впишите в это поле через ту же формочку "Данные фигуры" обычное число и посмотрите, возникнет ли ошибка. Число перекроет функцию =ID()


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 13 июл 2018, 17:31 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2251
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
...судя по описанию, возвращает уникальный ID фигуры в виде числа...

Нужно помнить, что ID уникален только в пределах страницы. На другой странице могут присутствовать такие же ID.
Цитата:
Но при попытке автоматически передать это значение как первичный ключ для записи в БД MS SQL...

Не понятен способ передачи данных.
Судя по присутствию слов "связанной записи", шейп уже связан с какой-то строкой данных. Значит уникальность и связь по ключу уже обеспечены. Но тогда какой еще может быть "первичный ключ"?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 12:19 
Не в сети

Зарегистрирован: 23 июн 2018, 16:21
Сообщений: 6
Использую Visio c: 2018
Уровнь квалификации: Не владею
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Цитата:
Если я правильно понял, это возникает в результате того, что во внешнюю БД передается сама формула, а не то значение которая она возвращает.

Не уверен, что это так...
Но это можно проверить. Впишите в это поле через ту же формочку "Данные фигуры" обычное число и посмотрите, возникнет ли ошибка. Число перекроет функцию =ID()

Уже проверял, вписывал то значение, которое возвращает функция ID() вручную, ошибка пропадает и значение передается в бд. К слову, меняя саму формулу в таблице свойств, имя этой формулы всегда фигурирует в ошибке мастера баз данных, которую я показал на скриншоте. В общем, какую формулу туда не вписывай, в само поле "Данных фигуры" в VISIO значение передается, а в бд передается имя формулы.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 12:29 
А можно код в студию?
В shapesheet можно записывать формулы и значения.

Можно с этим поэкспериментировать!


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 13:06 
Не в сети

Зарегистрирован: 23 июн 2018, 16:21
Сообщений: 6
Использую Visio c: 2018
Уровнь квалификации: Не владею
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Цитата:
Нужно помнить, что ID уникален только в пределах страницы. На другой странице могут присутствовать такие же ID.

Спасибо за ваш совет, учту это.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 13:27 
Не в сети

Зарегистрирован: 23 июн 2018, 16:21
Сообщений: 6
Использую Visio c: 2018
Уровнь квалификации: Не владею
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Гость писал(а):
А можно код в студию?
В shapesheet можно записывать формулы и значения.

Можно с этим поэкспериментировать!


Да кода как бы и нет :D. Используются только стандартные средства VISIO ShapeSheet, для связи с БД "Мастер баз данных", который является стандартной надстройкой самой VISIO. Я хочу автоматически передавать ID фигуры, которую присваивает VISIO во внешнюю БД в качестве первичного ключа. Вот создал поле данных фигуры с такой формулой в столбце "Value":
Код:
=ID()

Вот значение, которое она возвращает: Изображение
Когда указал это поле данных как первичный ключ для записи во внешней БД, VISIO передает саму формулу, вместо значения, которое она возвращает. Если вписать те же цифры в ручную - все окей, но есть необходимость что бы это происходило автоматически.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 13:39 
А что мешает ввести переменную, которая будет хранить значение ID.
И это значение передавать во внешнюю базу?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Передача ID фигуры во внешнюю БД.
СообщениеДобавлено: 16 июл 2018, 14:25 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2251
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Насколько я понимаю, вы делаете следующее.
Вы связываете (визардом) файл (источник) данных с мастер-шейпом. Назначаете ключевым поле ID.
Редактируете мастер-шейп и вписываете в поле Prop.ID функцию ID().
При попытке набросить запись из источника на страницу получаете ошибку.
Причина.
Visio при набрасывании записи передает данные из строки источника в шейп. Значение поля ID тоже передается в поле шейпа (туда, где у Вас прописана функция).
Потом отрабатывает функция и значение ID, переданное из базы, заменяется значением, вычисленным функцией.
После этого связь разрушается. То есть ID в строке базы не соответствует ID в шейпе. Visio пытается найти в базе запись, соответствующую ID из шейпа. Но найти не может и говорит "не удается прочитать все данные полей". На самом деле он уже ни одного поля для этой записи прочитать не может.
-------
Так делать нельзя. Ключевое поле (при такой связи) не редактируется внутри Visio.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB