Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дианка от 13-11-2014, 16:24:52

Название: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 13-11-2014, 16:24:52
Добрый день!Может по дурацки задала вопрос,но суть такая, в чертеж вставили блок,с атрибутами-данные которого считались с БД(таблица в SQL- serv).
в свойствах файла записала "ключик",  если осуществлять обновление данных то при коннекте с определенной таблицей,будет считывание строки с данным "ключиком".

теперь вопрос встал об обновлении,Как это осуществлять?
каждый раз при открытии файлов автокада сканировать на наличие этого блока?ок нашли,дальше что?
каждый раз коннектиться к базе читать и обновлять в фоне-мне кажется тоже не дело.


я вижу картину такую как с Xref  ссылками-когда в притянутых файлах жмут сэйв,появляется извещение.. типо того.

п.с. я немножко чайник чайниковый,прошу не серчать.
п.п.с. данные в БД я пока вносила вручную,для написания программы "считывания", далее планируется писать формочку для внесения  данных в таблицы.-может отсюда вылезет какой то маячок?
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 13-11-2014, 16:31:08
Приветствую на форуме!
в свойствах файла записала "ключик"
Какой ключик?
я вижу картину такую как с Xref  ссылками-когда в притянутых файлах жмут сэйв,появляется извещение.. типо того.
"Типо того" ничего не понял. ;) Xref знает путь к dwg-файлу из которого вставлен и в чертеже при вставке Xref создается запись таблицы блоков, которая имеет свойство IsFromExternalReference == true
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 13-11-2014, 17:45:41
Какой ключик?
Ну я путь к проекту сохраняю в Properties ->Summary->HyperlinkBase ->D:\Projects\2014\Zavod...
 типо такого.
просто ранее в таблице данных (SQL)в качестве ключа поиска у меня заявлен -путь. (т.е. при первом коннекте ищет по "Select ..... from mytable where blabla=path"

"Типо того" ничего не понял.  Xref знает путь к dwg-файлу из которого вставлен и в чертеже при вставке Xref создается запись таблицы блоков, которая имеет свойство IsFromExternalReference == true
так я к тому что решение хотелось бы примерно такое (с точки зрения пользователя).Как сделать маячок на изменения?
что в данной таблице изменилось что-то..не подвергая машины  пользователей а-када постоянным коннектам к базе.

Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 13-11-2014, 17:52:30
что в данной таблице изменилось что-то..не подвергая машины  пользователей а-када постоянным коннектам к базе.
А как ты себе такое представляешь? Нужно по таймеру обращаться к базе. Других вариантов я не вижу. Более того. Я так понимаю что на автомате обновлять из базы нельзя. Нужно спрашивать у пользователя.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 13-11-2014, 18:05:12
А как ты себе такое представляешь? Нужно по таймеру обращаться к базе. Других вариантов я не вижу. Более того. Я так понимаю что на автомате обновлять из базы нельзя. Нужно спрашивать у пользователя.
я пока ничего не представляю,за неимением опыта работы с SQL )))  ,месяц где-то, ковыряюсь в C#, просто хотела узнать есть ли инструментарий,или какой то механизм отслеживания конкретных таблиц, может какой то промежуточный файл тхт писать?типо лога..или как .
У пользователя врядли спрашивать надо,его просто оповестить,что произошли изменения  ->а далее  пока мысли,что бы нажали кнопку обновленя-> запускать снова форму с новыми данными->применить.
Конечно можно просто оставить кнопку обновления,жмут->коннект(правда тут вопрос количества коннектов для меня темный лес, одновременно могут человек 20 к БД лезть)->считалось акктуальное->применить.НО пользователи,ониж такие,всатвили,и забы(и)ли,пока не пнёшь...
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 13-11-2014, 18:34:07
просто хотела узнать есть ли инструментарий,или какой то механизм отслеживания конкретных таблиц
Отслеживания где? В чертеже открытом в AutoCAD? Есть. В базе данных? Наверное есть, но тут я ничем не помогу. Более того я пока совсем не понимаю постановку задачи.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дима_ от 13-11-2014, 21:44:24
А как ты себе такое представляешь? Нужно по таймеру обращаться к базе. Других вариантов я не вижу.
Как минимум Oracle и MSSQL имеют штатный функционал "событий" на обновление "другими" полученного результата (то есть по сути изменения данных). MySql такого не умеет (хотя может в последних уже и умеет - я не следил) - но "умельцы" делали варианты (по сути опросом через интервал). Правда сами-же "производители" (я про фирменные, а не про умельцев) не рекомендуют особо сильно загружать СУБД такими "событиями".
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: trir от 14-11-2014, 06:53:31
Синхронизировать базу с подшивкой, а блоки с подшивкой АкАд сам синхронизирует!
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 09:24:03
Отслеживания где? В чертеже открытом в AutoCAD? Есть. В базе данных? Наверное есть, но тут я ничем не помогу. Более того я пока совсем не понимаю постановку задачи.

Я ведь вообще речи не вела о таблицах данных в автокаде %)..конечно же речь о строках таблиц БД(SQL)..
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 09:26:07
Правда сами-же "производители" (я про фирменные, а не про умельцев) не рекомендуют особо сильно загружать СУБД такими "событиями".
Спасибо.
А кого(что) в таком случае грузить?))..вот в чём вопрос,будем искать решение..
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 09:28:06
Синхронизировать базу с подшивкой, а блоки с подшивкой АкАд сам синхронизирует!
Спасибо.
не будет подшивок :) я что ж зря писала всё,чтоб к подшивкам уйти(опять же коллеги когда то рыли эту тему,сказали не подходит нам она,я и не стала изучать),да и опять же как происходит синхронизация?опять же коннект к бд....постоянный? по таймеру? кол-во коннектов=кол-во пользователей которые в данное время используют т.н. подшивки?
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 14-11-2014, 10:35:36
Я ведь вообще речи не вела о таблицах данных в автокаде %)..конечно же речь о строках таблиц БД(SQL)..
Тогда напрашивается следующий вопрос. Почему вопросы по работе с БД задаются на форуме по AutoCAD .NET API? Может их следует задавать на специализированном форуме? Где-нибудь на SQL.RU. Предлагаю отделить мух от котлет.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Андрей Бушман от 14-11-2014, 10:50:05
теперь вопрос встал об обновлении,Как это осуществлять?
каждый раз при открытии файлов автокада сканировать на наличие этого блока?ок нашли,дальше что?
каждый раз коннектиться к базе читать и обновлять в фоне-мне кажется тоже не дело.
Подписаться на события сохранения чертежа, его печати, публикации и экспорта данных. Можешь всплывающим окошком спрашивать у юзера, а можешь автоматом обновлять атрибуты вхождения блока (или даже формулы в составе полей определения).

Если нужно оповещение сразу после обновления БД, то можешь написать WCF службу, которая будет это делать (как вариант).

Цитата: Дианка
Ну я путь к проекту сохраняю в Properties ->Summary->HyperlinkBase ->D:\Projects\2014\Zavod...
Почитай о системной переменной ProjectName.

Цитата: Дианка
я пока ничего не представляю,за неимением опыта работы с SQL )))
Почитай книгу, указанную здесь (http://adn-cis.org/forum/index.php?topic=400.0) в п.7. Это своего рода "Библия" на тему того, как в .NET работать с СУБД.

Цитата: Дианка
правда тут вопрос количества коннектов для меня темный лес, одновременно могут человек 20 к БД лезть
Такое количество для серьёзных СУБД не существенно. Это если бы использовался MS Access, тогда да - там желательно не более 10-то одновременных подключений.

Цитата: Дианка
опять же коллеги когда то рыли эту тему,сказали не подходит нам она,я и не стала изучать
Ох уж эти "роющие коллеги (http://bushman-andrey.blogspot.ru/2013/09/autocad.html)", как правило не доходящие до изучения второй и третьей вкладки подшивок, не говоря уж о более глубоком изучении...

Цитата: Александр Ривилис
Почему вопросы по работе с БД задаются на форуме по AutoCAD .NET API? Может их следует задавать на специализированном форуме? Где-нибудь на SQL.RU. Предлагаю отделить мух от котлет.
Поддерживаю.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 16:52:53
рос. Почему вопросы по работе с БД задаются на форуме по AutoCAD .NET API? Может их следует задавать на специализированном форуме? Где-нибудь на SQL.RU. Предлагаю отделить мух от котлет.
Вопрос же не совсем по БД...
а связь БД с Автокадом.
Может можно как то не шибко затратно(для ресурсов ПК) какие то обращения при загрузке чертежа осуществлять.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 14-11-2014, 16:59:16
Может можно как то не шибко затратно(для ресурсов ПК) какие то обращения при загрузке чертежа осуществлять.
Можно. Можно подписаться на событие открытия документа (DocumentCollection.DocumentCreated). Но всё остальное (т.е. обращение к БД) к AutoCAD не имеет никакого отношения.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 17:11:54
Подписаться на события сохранения чертежа, его печати, публикации и экспорта данных. Можешь всплывающим окошком спрашивать у юзера, а можешь автоматом обновлять атрибуты вхождения блока (или даже формулы в составе полей определения).

Если нужно оповещение сразу после обновления БД, то можешь написать WCF службу, которая будет это делать (как вариант).
-Спасибо,почитаю.

Цитата: Андрей Бушман
Почитай о системной переменной ProjectName.
-
не очень поняла зачем она мне, этот путь я беру из программки..folderbrowser.selectedpath ,а не какие то связующие пути чертежа....
ну насколько я поняла из прочитанного.

Цитата: Андрей Бушман
Почитай книгу, указанную здесь (http://adn-cis.org/forum/index.php?topic=400.0) в п.7. Это своего рода "Библия" на тему того, как в .NET работать с СУБД.
-еслиб книги читались и усваивались с нуля,за день-два, вопрошающих юзверей на ваших форумах бы практически не было :)

Цитата: Андрей Бушман
Ох уж эти "роющие коллеги (http://bushman-andrey.blogspot.ru/2013/09/autocad.html)", как правило не доходящие до изучения второй и третьей вкладки подшивок, не говоря уж о более глубоком изучении...
тем не менее, ведь файлы подшивок аналогично будут коннектиться к БД...и в виду того что функционал (без подшивок) уже написан фактически ,думаю нецелесообразно возвращаться к первой ступени. И кстати, зря Вы так про коллег ) коллеги ,далеко не глупые,и дотошные,если они сказали что нам это не подходит,наверное не подходит :) ,может в виду нашей постоянной нестандартности(в смысле чуть ли не каждый проект отличается, постоянно какие то новововведения,изменения ,например-для такого проекта такой порядок,для другого -второй,для третьего-третий и т.д. )-в такой ситуации довольно сложно "подогнать под стандарт".

Цитата: Александр Ривилис
Почему вопросы по работе с БД задаются на форуме по AutoCAD .NET API? Может их следует задавать на специализированном форуме? Где-нибудь на SQL.RU. Предлагаю отделить мух от котлет.
Цитата: Андрей Бушман
Поддерживаю..
Повторяюсь,вопрос не просто про СУБД,а связь.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 14-11-2014, 17:16:51
Может можно как то не шибко затратно(для ресурсов ПК) какие то обращения при загрузке чертежа осуществлять.
Можно. Можно подписаться на событие открытия документа (DocumentCollection.DocumentCreated). Но всё остальное (т.е. обращение к БД) к AutoCAD не имеет никакого отношения.

В общем ясно,что ничего не ясно...
Господа,давеча ,вышеписавший ,Андрей Бушман,послал меня именно сюда,с приблизительно таким вопросом,именно в эту ветку...(.Net API)
так что я вас совсем не понимаю :) прям как чиновники футболите с одного форума на другой.
Ладно уж,спасибо и на том.
----------------
а как идентифицировать то событие сохранения чертежа........чтож теперь у любого пользователя автокада будет на сохранение выскакивать....?
пойду подймаю

Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Александр Ривилис от 14-11-2014, 17:20:18
Господа,давеча ,вышеписавший ,Андрей Бушман,послал меня именно сюда,с приблизительно таким вопросом,именно в эту ветку...(.Net API)
так что я вас совсем не понимаю :) прям как чиновники футболите с одного форума на другой.
Еще раз. Мухи отдельно - котлеты отдельно. Как работать со стороны AutoCAD объяснят на этом форуме. Как работать с Базами Данных здесь объяснять не будут - непрофильный это форум. Андрей об этом сегодня и написал.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Андрей Бушман от 14-11-2014, 17:32:42
-еслиб книги читались и усваивались с нуля,за день-два, вопрошающих юзверей на ваших форумах бы практически не было 
ADO.NET - тема достаточно сложная, объёмная и грамотно, последовательно разжёвана в указанной книге. Изучать эту технологию путём вопросов на форумах - это будет гораздо дольше по времени и результат при этом будет практически нулевой, особенно по качеству приобретённых навыков (т.е. спрашивать можно до пенсии, но так ничему и не научиться). Лучше потратить пару недель и прочитать мануал и потом всё время "за полчаса долетать ©", чем на "наших" или "не наших" форумах ждать у моря погоды (разжёванного ответа). А уже имея некоторый багаж знаний на основе прочитанного материала можно более чётко формировать конкретные вопросы на специализированных форумах.

Цитата: Дианка
тем не менее, ведь файлы подшивок аналогично будут коннектиться к БД...
DST файлы коннектятся к БД? Похоже Вы, или Ваши специалисты что-то путаете...

Цитата: Дианка
не очень поняла зачем она мне, этот путь я беру из программки..folderbrowser.selectedpath ,а не какие то связующие пути чертежа....
С помощью этой системной переменной AutoCAD для каждого DWG индивидуально способен определять каталоги, в которых следует выполнять поиск нужного ресурса. Она своего рода определяет проект к которому относится этот DWG файл. Если меняются настройки проекта, то все DWG этого проекта автоматом подхватывают их. Это "родной" механизм AutoCAD, так что можно воспользоваться им.

Цитата: Дианка
так что я вас совсем не понимаю :)
Это у нас как-то взаимно получается.

Цитата: Дианка
а как идентифицировать то событие сохранения чертежа........чтож теперь у любого пользователя автокада будет на сохранение выскакивать....?
Вы не ленитесь скачивать ObjectARX SDK и заглядывать в его подкаталог doc - это Вам пригодится, если планируете писать код под AutoCAD. Как вариант (по поводу первого вопроса): подпишитесь на Database.BeginSave или Database.SaveComplete (смотря по обстоятельствам).
По поводу второго - а это вам решать программно, у каждого или не у каждого. Вы, для начала, чётко для себя определитесь, что именно вы хотите (что должно происходить и как это должно выглядеть). Без понимания этого ничего вразумительного не сделаете.
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 19-11-2014, 09:33:24
DST файлы коннектятся к БД? Похоже Вы, или Ваши специалисты что-то путаете...
я не знаю какие там файлы ) ,но как-то же синхронизация должна происходить тем не менее..

С помощью этой системной переменной AutoCAD для каждого DWG индивидуально способен определять каталоги, в которых следует выполнять поиск нужного ресурса. Она своего рода определяет проект к которому относится этот DWG файл. Если меняются настройки проекта, то все DWG этого проекта автоматом подхватывают их. Это "родной" механизм AutoCAD, так что можно воспользоваться им.
а если файл копи-паст?или сэйв эс...
не подскажете где почитать,"в конкретном действии"? я нашла всего две ссылочки в котором просто дается определение...причем для меня показалось туманным %)



Как вариант (по поводу первого вопроса): подпишитесь на Database.BeginSave или Database.SaveComplete (смотря по обстоятельствам).
По поводу второго - а это вам решать программно, у каждого или не у каждого. Вы, для начала, чётко для себя определитесь, что именно вы хотите (что должно происходить и как это должно выглядеть). Без понимания этого ничего вразумительного не сделаете.

отдохнув и переобдумав,я решила сделать реакцию на Plot(в Автокаде),это возможно? ну точнее как это реализовать......пойду пока почитаю
=====================
спасибо за идеи!

p.s. т.е. им информация эта нужна в принципе уже на бумаге,точнее уж совсем актуальная....а как так реакцию  после комнады Plot я сама себя не поняла)))) точнее как это реализуемо то,получается после ctrl+p  выскакивает моё сообщение "обновите информацию" ..
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: bargool от 19-11-2014, 09:51:22
отдохнув и переобдумав,я решила сделать реакцию на Plot(в Автокаде),это возможно? ну точнее как это реализовать......пойду пока почитаю
p.s. т.е. им информация эта нужна в принципе уже на бумаге,точнее уж совсем актуальная....а как так реакцию  после комнады Plot я сама себя не поняла)))) точнее как это реализуемо то,получается после ctrl+p  выскакивает моё сообщение "обновите информацию" ..
Если хотите реагировать именно перед печатью (уже после того, как пользователь отправил файл на печать, но печать ещё не началась), то смотрите на предмет Autodesk.AutoCAD.PlottingServices.PlotReactorManager в SDK
Код - C# [Выбрать]
  1. // Подписываемся на печать
  2. PlotReactorManager manager = new PlotReactorManager();
  3. manager.BeginPage += new BeginPageEventHandler(manager_BeginPage);
При этом учтите, что при публикации печатаются не сами файлы, а их копии
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 25-11-2014, 10:20:43
Можно подписаться на событие открытия документа (DocumentCollection.DocumentCreated)

советом "жюри",всё таки решили осуществить реакцию на открытие...

т.е. открыл-проверка на наличие блока, далее выемка тройки строковых значений из самого документа,и сверка их с вновь подкачанными из БД, если -различия,то обновить...
и всё это в фоне %)
вроде звучит не шибко сложно,только я не  предстаавляю как это аля в "стартап" внести %)  ..
впрочем я вернусь к этому позже
Название: Re: Как синхронизировать процесс обновления данных таблицы SQL-serv и чертежа?
Отправлено: Дианка от 25-11-2014, 10:22:28
Если хотите реагировать именно перед печатью (уже после того, как пользователь отправил файл на печать, но печать ещё не началась), то смотрите на предмет Autodesk.AutoCAD.PlottingServices.PlotReactorManager в SDK
Спасибо.
не хоЧат перед печатью,впрочем может так оно и лучше(проще) может :) при открытии .