Переключение на локальную базу данных через реестр

Olga94
отредактировано 27 июн Раздел: API

Здравствуйте Уважаемые специалисты nanoCAD!

Подскажите пожалуйста, как через внесение изменений в реестре (какие ключи?) задать локальный тип базы для NanoCAD - переключить на "Источник данных - локальная база"?

*Если задать значение параметру "SelectDbDlgLocalDb"= "C:\ProgramData\Nanosoft\nanoCAD x64 24.0\DataRW\std.mdf" с помощью внесения изменений в реестре по пути: "HKCU\SOFTWARE\Nanosoft\nanoCAD x64\24.0\nCAD\McBrowser", то все равно не меняется - не меняется "источник" на "локальная база", добавляется лишь путь до mdf, т.е. получается как на рисунке ниже:

Теги темы:

Ответы

  • doctorRAZ
    отредактировано 27 июн

    проще переключать базу чрез нанокомстроку

    для локальной мдф

    (vl-cmdf "spchangedb" "z:\BD_SQL\nana\std.mdf")

    не умеет пробелы в пути

    результат в момент выполнения пишется в AppOptions.xml, оттуда жэж и читается при старте наны или при перезагрузке-изменении AppOptions.xml

    для постгресс

    (vl-cmdf "spchangedb" "pgsql:nspds240")

    для большого sql

    (vl-cmdf "spchangedb" "SQL:C-SQLSERVER:mc_spds9")

  • Olga94
    отредактировано 28 июн

    Команда spchangedb только в CПДС?

    Нужно еще в чистом NanoCAD. Может через команду "params"?

  • Да, spchangedb для СПДС, mcchangedb для механики

  • В чистом NanoCAD программно можно изменить источник (базу)?

  • MCAD
    отредактировано 28 июн
  • наверное возможно через Multicad.NET

    McParamManager._GetParam (int)

    internal Object _GetParam(int idParam);
    

    McParamManager.SetParam (Object^, int)

    public bool SetParam(ref Object param, int idParam);
    
    idParam=9
    

    <param id="9" name="Источник данных" ctrl="button_string" value="D:\user\BD_SQL\nana\std.mdf"/>

  • Olga94
    отредактировано 28 июн

    А можете подсказать как сделать через редактирование xml:

    1. путь можно узнать например через реестр (HKEY_CURRENT_USER\SOFTWARE\Nanosoft\nanoCAD x64\24.0\nCAD\MCSParams, AppOptions_ru-RU)
    2. редактируем это xml (vbs):

    Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
    objXMLDoc.async = False
    objXMLDoc.load("AppOptions.xml")

    Set ElemList = objXMLDoc.getElementsByTagName("Источник данных??")
    plot = ElemList.item(0).Text

    ElemList.item(0).text="НОВОЕ ЗНАЧЕНИЕ"

    objXMLDoc.save("AppOptions.xml")

    Только как исправить, чтобы найти узел "<param id="9" name="Источник данных" ctrl="button_string" value="pgsql:ncad_24_0"/>" и заменить его на например "z:\BD_SQL\nana\std.mdf"?

    Фрагмент из xml, где нужно "value="pgsql:ncad_24_0" поменять на "value="z:\BD_SQL\nana\std.mdf":

    ' <section sid="2" name="Доступ к базам данных" icon="22" slide="-1">
    ' <param id="9" name="Источник данных" ctrl="button_string" value="pgsql:ncad_24_0"/>
    ' <param id="13153" name="Путь к внешним файлам проектов" ctrl="dialog_system_folder_browser" hidden="1" value="[DATA_ALL_RW]"/>
    ' <param id="12" ctrl="edit_int" hidden="1" name="Standards filter" value="1021"/>
    ' <param id="13" name="Фильтр стандартов" ctrl="button_string" hidden="1" value="ЕСКД, ISO, DIN, JUS, PN, GB, CSN, NF, IS"/>
    ' <param id="14" name="Фильтр номенклатуры" ctrl="button_string" hidden="1" value="Отключен"/>
    ' </section>

  • doctorRAZ
    отредактировано 28 июн

    через редактирование хмл будет работать только если отредактировать перед нанозапуском, выше жэж написал, читает его только при старте

        /// <summary>
    /// переключалка нанобаз
    /// </summary>
    [Rtm.CommandMethod("drz_changedb", Rtm.CommandFlags.Session)]
    public void changedbMod()
    {
    string oldBd = Multicad.AplicationServices.McParamManager.GetStringParam(9);//получаем путь к базе текущего приложения

    string sMDF = "z:\\BD_SQL\\nana\\std.mdf";//local *.mdf
    bool bsetBD = Multicad.AplicationServices.McParamManager.SetParam(sMDF, 9);

    string sSQL = "SQL:C-SQLSERVER:mc_spds9";
    bsetBD = Multicad.AplicationServices.McParamManager.SetParam(sSQL, 9);

    string sPSQL = "pgsql:nspds240";
    bsetBD = Multicad.AplicationServices.McParamManager.SetParam(sPSQL, 9);

    }

    уот так переключает

    это тестовый код,

    потом можно дооформить, чтобы передавать в класс параметром базу, или открывать файловый диалог..

    ******

    PS переходи на светлую сторону .NET C#
    значительно проще, возможностей и примеров больше чем на басик, питон или лисп

  • Вижу пользователя, который насоздавал своих таблиц и отредактировал под себя и тут добрый волшебник взял и сменил БД :-( без его ведома

  • Olga94
    отредактировано 28 июн

    библиотеки mapimgd.dll и mapibasetypes.dll можете выложить? Хотя они вроде есть в папке с nanoCAD

    https://www.pvsm.ru/c-2/268127

  • ну зачем жэж волшебник, для большинства пользователей базы темный лес, а где лежит и как подключить вообще космос…

    поэтому так

    или так

    Счастье для всех, даром, и пусть никто не уйдёт обиженный!(с)

  • Olga94
    отредактировано 28 июн

  • @doctorRAZ где лежат и как настроить, пользователю сложно объяснить, вот создать таблицу в Верхнем колонтитуле на 50 строк, сохранив в базу перезаписав с тем де именем - любимое занятие.

    А потом - "куда пропали мои таблицы"

  • @MCAD в сетевой базе перезапишет только свои объекты, в локальной все объекты его

    Право пользователя, проблемы то же его)))

  • вступай в клуб разработчиков, там тебе и SDK со справкой и примерами и форум техподдержки

    все необходимые библиотеки есть в нанокаде, единственное при добавлении в проект

    копировать локально=false

    вот быстрый старт от @kpblc

    https://autolisp.ru/2024/03/17/pervoe-prilozhenie-net-dlya-nanocad-23/

  • doctorRAZ
    отредактировано 28 июн

    мне показалось несправедливым, что пользователи голой платформы лишены радости переключать базы мультикад из ком строки..

    исправляю это недоразумение

    загрузить сборку (загприл)

    вызов drz_changedb

    дальше подставляем путь к mdf (можно с пробелами) - z:\BD SQL\nana\std.mdf

    либо базу postgreSQL - pgsql:nspds240

    SQL - SQL:C-SQLSERVER:mc_spds9

    в спдс и механике может быть излишне там есть (spchangedb, mcchangedb) но который год прошу, чтоб починили баг с пробелом… пришлось чинить самому)))

    ссылочка на гит

    https://github.com/doctorRaz/ChangedbMod

  • Olga94
    отредактировано 1 июл

    ChangedbMod_NC.zip Скажите пожалуйста работает во всех версиях NanoCAD 22-24?

  • doctorRAZ
    отредактировано 1 июл

    проверил

    В 20, 22-24 работает

    upd даже в нано20 работает.

  • Спасибо!