УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Не сохраняются подключенные библиотеки SQLite


Автор Сообщение
Сообщение создано: 03. 10. 2013 [08:54]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Добрый день!
Захотел разместить главную базу нового проекта на БД Mysql и столкнулся со следующей особенностью - стоит только в настройках проекта поменять главную БД со стандартной SQLite.GenDB на Mysql.xDB, как все подкюченные библиотеки SQLite(OscadaLibs,vcaBase и т.д.) после перезахода в программу исчезают, исчезает соотвественно и все что сделано в проекте с их использованием. Повтороное подключение работает ровно до следующего перезахода. Если главную БД вернуть на дефолтную SQLite.GenDB, то все подключенные библиотеки восстананавливаются и работают как положено. Как-то это можно обойти? Должно ли так быть? В примере АГЛКС на Mysql отдельно подключены все эти базы, но по удаленке с Вашего сервера и они недоступны по каким-то причинам, а в стандартной комплектации в папке ~/.openscada/LibsDB есть только базы SQLite. Может возможно их конвертировать каким то образом и подвязать к Mysql?
Сообщение создано: 03. 10. 2013 [10:39]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Waterdisp" wrote:

Захотел разместить главную базу нового проекта на БД Mysql и столкнулся со следующей особенностью - стоит только в настройках проекта поменять главную БД со стандартной SQLite.GenDB на Mysql.xDB, как все подкюченные библиотеки SQLite(OscadaLibs,vcaBase и т.д.) после перезахода в программу исчезают, исчезает соотвественно и все что сделано в проекте с их использованием.

Естественно, поскольку БД этих библиотек прописаны в старой и в новой отсутствуют.
А вообще как меняли? Главная БД меняется только в конфигурационном файле и из конфигуратора там не сохраняется.

"Waterdisp" wrote:

Повтороное подключение работает ровно до следующего перезахода.

Что значит повторное подключение, или добавили БД библиотек? Если так, значит не сохранили их.

"Waterdisp" wrote:

Как-то это можно обойти?

Менять главную БД в конфиге, добавить библиотечные по новой и сохранить. Или поменять главную БД, сохранить глобально, а затем главную БД поменять в конфиге.

"Waterdisp" wrote:

Должно ли так быть?

Да должно, почему выше.

"Waterdisp" wrote:

В примере АГЛКС на Mysql отдельно подключены все эти базы, но по удаленке с Вашего сервера и они недоступны по каким-то причинам, а в стандартной комплектации в папке ~/.openscada/LibsDB есть только базы SQLite.

Естественно ибо я не могу предоставлять свой MySQL сервер всем на растерзание! Кроме того там канал неширокий.

"Waterdisp" wrote:

Может возможно их конвертировать каким то образом и подвязать к Mysql?

Да конечно, простым копированием БД: http://wiki.oscada.org/Doc/OpisanieProgrammy#h827-2 и http://wiki.oscada.org/Doc/QuickStart#h988-22
Именно так я их ранее с первичного MySQL переносил в SQLite, при релизе.

Learn, learn and learn better than work, work and work.
Сообщение создано: 03. 10. 2013 [16:28]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Да я вроде бы разобрался, в конфигурационном файле сохраняется информация о БД, которую ты выбрал главной для проекта, но не сохранятестя информация о настройках подключения к ней (хотя мб я ошибаюсь, и она не должна там храниться). В любом случае, после перезапуска выбранная БД Mysql перестает быть главной - соттветсвенно теряются и все подключенные и сохраненные в БД модули. Я только не нашел нигде как правильно настройки БД Mysql добавить в конфигурационный файл. После перезапуска у меня обратно сбиваются в дефолтные (localhost,;root;123456;test;;;;utf8) настройки подключения к базе Mysql.

Для SQLite Gen.DB в файле openscada.xml есть строчка настроек :

<fld ID="GenDB" TYPE="SQLite" NAME="Main DB" ADDR="./DATA/MainSt.db" CODEPAGE="UTF-8" />

Как прописать аналогичную строку настроек для mysql (предположим она хранится локально)?


[Сообщение редактировалось 1 раз(а), в последний раз 03.10.2013 в 16:36.]
Сообщение создано: 03. 10. 2013 [17:25]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Waterdisp" wrote:

Для SQLite Gen.DB в файле openscada.xml есть строчка настроек :

<fld ID="GenDB" TYPE="SQLite" NAME="Main DB" ADDR="./DATA/MainSt.db" CODEPAGE="UTF-8" />

Как прописать аналогичную строку настроек для mysql (предположим она хранится локально)?

<fld ID="GenDB" TYPE="MySQL" NAME="Main DB" ADDR="localhost;user;123456;MainSt;;;utf8" CODEPAGE="UTF-8"/>

Learn, learn and learn better than work, work and work.
Сообщение создано: 04. 10. 2013 [08:54]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Спасибо, все заработало :)
Сообщение создано: 04. 10. 2013 [09:03]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Waterdisp" wrote:

Спасибо, все заработало :)

OK
Подумал, наверно вынесу хранение перечня подключенных БД исключительно в конфиг, дабы не спотыкаться постоянно об первичность курицы или яйца.

Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 10. 2013 [18:40]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Вот еще нашел 1 неясный момент.
Если попробовать создать новый свой проект и сделать новую библиотеку (руководствуясь строками из мануала "Быстрый старт"), то после размещения виджета Box, любая попытка разместить на нем графический элемснт заканчивается ошибкой "Родительский элемент пуст или идентичен себе!". В настройках "Родительский виджет" указывает на /wdg_Main/wdg_anShow(например). При этом вышеописанные действия по добавлению основного элемента в проекте "Группы сигнализаций" в демо-станции создают элемент с точно такими же параметрами и к ошибкам не приводят...

[Сообщение редактировалось 1 раз(а), в последний раз 06.10.2013 в 18:40.]
Сообщение создано: 06. 10. 2013 [20:14]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Waterdisp" wrote:

Если попробовать создать новый свой проект и сделать новую библиотеку (руководствуясь строками из мануала "Быстрый старт"),

Где там пункт про создание проекта?

"Waterdisp" wrote:

то после размещения виджета Box,

Размещения где? В библиотеке или проекте?

"Waterdisp" wrote:

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

Добавляю многократно и проблем не имею, а тут смотрите в настройки контейнера или элемента, который вставляете, похоже там и есть то про что и ошибка.

"Waterdisp" wrote:

В настройках "Родительский виджет" указывает на /wdg_Main/wdg_anShow(например).

"/wdg_Main" — нет такого префикса у библиотек!

"Waterdisp" wrote:

При этом вышеописанные действия по добавлению основного элемента в проекте "Группы сигнализаций" в демо-станции создают элемент с точно такими же параметрами и к ошибкам не приводят...

Точно описывайте пункты ибо из Вашего описания ничего не понятно!

Learn, learn and learn better than work, work and work.
Сообщение создано: 07. 10. 2013 [11:45]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
"roman" wrote:

Где там пункт про создание проекта?


Пункт 5.2. "Создание нового кадра, мнемосхемы", я просто неправильно выразился :) На этапе добавления 5 виджетов типа "Отобр аналог" на элемент типа "Группа Элементов."

Я, вроде бы, начинаю понимать, откуда растут ноги у этой проблемы. В тестовых целях создал еще 1 проект, сделал основной базой текущую SQLite.GenDB, подключил к проекту библиотеки шаблонов (OscadaLibs.db, vcaBase.db, vcaElectroEls.db, vcaTest.db) и виджеты добавились в библиотеку без проблем. В моем текущем проекте я рассчитывал сделать основную базу на Mysql и просто подключить к проекту Sqlite-библиотеки шаблонов. Они-то подключились и загрузились в проект безо всяких ошибок, но по факту, когда библиотеки виджетов размещены в базах на sqlite, а главная база проекта — на mysql виджеты добавляются с вышеуказанной ошибкой и лишь только виджеты из стандартной библиотеки виджетов wlb_originals добавялются без проблем ибо каким то образом оказались в созданной базе проекта.

Интересен еще момент : после импортирования таблиц в проект (нажатием на «Загрузить систему из этой БД») можно видеть дерево импортированных таблиц, если щелкнуть по имени БД. В случае проекта на Mysql дерево импортированных таблиц неполное — оно не соотвествут списку таблиц в базе. Когда проект на sqlite импортируются все таблицы.

Вы выше писали про то, переносили базы из Mysql на SQLite простым копированием. Не совсем понял, что имелось ввиду? Ведь формат хранения данных разный у этих 2х СУБД. Дамп из sqlite мне тоже не удалось корректно импортировать в mysql из-за различий в синтаксисе.
Сообщение создано: 07. 10. 2013 [15:49]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Waterdisp" wrote:

В моем текущем проекте я рассчитывал сделать основную базу на Mysql и просто подключить к проекту Sqlite-библиотеки шаблонов. Они-то подключились и загрузились в проект безо всяких ошибок, но по факту, когда библиотеки виджетов размещены в базах на sqlite, а главная база проекта — на mysql виджеты добавляются с вышеуказанной ошибкой и лишь только виджеты из стандартной библиотеки виджетов wlb_originals добавялются без проблем ибо каким то образом оказались в созданной базе проекта.

Библиотека примитивов не сохраняется в БД, она формируется.
Тогда и посмотрите в каком виде загрузился "AnShow", открыв его для редактирования. Хотя разницы откуда оно грузится нет.

"Waterdisp" wrote:

Интересен еще момент : после импортирования таблиц в проект (нажатием на «Загрузить систему из этой БД») можно видеть дерево импортированных таблиц, если щелкнуть по имени БД. В случае проекта на Mysql дерево импортированных таблиц неполное — оно не соотвествут списку таблиц в базе. Когда проект на sqlite импортируются все таблицы.

А не нужно включать две БД разного типа, но с одним содержимым поскольку будет загружено из одной, а загрузка из другой уже ни к чему не приведёт, точнее ранее загруженные объекты будут грузиться из первой БД.

"Waterdisp" wrote:

Вы выше писали про то, переносили базы из Mysql на SQLite простым копированием. Не совсем понял, что имелось ввиду? Ведь формат хранения данных разный у этих 2х СУБД. Дамп из sqlite мне тоже не удалось корректно импортировать в mysql из-за различий в синтаксисе.

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


А выполняется копирование не на уровне SQL, а на уровне объектов записей БД в OpenSCADA, которые абстрагированы от диалекта SQL к внутренним данным OpenSCADA. Собственно для чего и нужны модули БД, а не достаточно чего-то типа ODBC.

Learn, learn and learn better than work, work and work.



0731