Base как фронтенд для MySQL

Автор luu, 27 мая 2019, 05:41

0 Пользователи и 1 гость просматривают эту тему.

luu

Прошу помощи по сабжу. Или ткнуть в годный howto или здесь простым языком объяснить.

Суть. Имеется база в Calc, которая стала большой и неповоротливой. Плюс имеется насущная надобность сделать ее мультипользовательной (сейчас сбор и обновление данных происходит путем пересылки данных (у каждого пользователя - свои поля для заполнения) одному оператору, а тот вносит изменения в общую таблицу и сохраняет ее в облаке с доступом рид-онли для всех остальных).

Собственно, погуглив, почитав форум понял, что нужно ориентироваться на связку Base + MySQL. Но для начала решил попробовать попрактиковаться на SQLite на локальной машине.
Вот тут понимания нет. SQLite установил, через консоль создал пробную таблицу, получил файлик типа mysql.db, а как к нему подключиться из Base и попробовать изменить созданную таблицу, создать новые?
Драйвер вроде поставил (ODBC), пытаюсь через него подключиться, но только создается новая пустая база (и не понятно, каким образом она связана и связана ли с SQLite).
В SQL и вообще базах данных особо не понимаю, но хочу разобраться. С Calc дружу, но его уже не хватает.

В общем, как создать SQLite базу и управлять ею через Base?  ???

LibreOffice
Версия: 6.2.3.2
Ubuntu 16.04

luu

С горем пополам получилось соединяться с файликом базы данных SQLite через драйвер ODBC. Помог этот мануал:
https://thejeshgn.com/2018/08/23/using-sqlite-with-libreoffice-base-on-linux/

После успешного подключения создал табличку, прописал поля.
Настал черед внести в нее данные. Ctrl+V в Calc, ПКМ на свежесозданной таблице Вставить > Добавить данные и... Ничего! Таблица пустая, никаких сообщений нет!

Открыл файл с БД через sqlitebrowser - вижу, чо данные прекрасно вставляются. Все значения на своих местах.
А при открытии через Base - таблица пустая. Куда копать?

luu


Bigor

Почитайте вот это. Здесь
про FB и Base, но проблемы похоже одинаковые
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

luu

#4
Цитата: Bigor от 27 мая 2019, 15:00
Почитайте вот это. Здесь
про FB и Base, но проблемы похоже одинаковые

Спасибо! Как раз эту ветку параллельно изучаю. И Да, это мой случай:

Цитата: Kadet от  5 марта 2019, 20:32Итак, народ, я таки нашёл самую суть этой проблемы.
В расширенных настройках базы данных (Правка/Базы_данных/Расширенные_настройки) во кладке "Специальные настройки" в этом "рояле" из галочек есть самая нижняя - "Тип результирующего набора из драйвера базы данных". Чтобы база нормально работала с Firebird_ODBC она должна быть отключена. Так вот - в старой LO_5 - она отключается, а вот в новой LO_6 - нет. Сколько её не тыкай - после перезагрузки она снова включается. Если её отключить и не перегружая продолжать работать - всё работает и в 5-й и в 6-й. Однако после перезагрузки в 5-й она сохраняет отключенное состояние, а в 6-й снова самопроизвольно включается.

Это, конечно можно обойти макросом. В частности при загрузке самой БД на событие "Открытие файла" (в головной форме - Сервис/Настройка/События) у меня стоит макрос, где я отлавливаю в глобальную переменную объект головной БД  - ThisDatabaseDocument. Вот там можно макросом снять эту самую галочку:
Код:
   ThisDatabaseDocument = ThisComponent
   ThisDatabaseDocument.DataSource.Settings.RespectDriverResultSetType = false

Кстати, в этих расширенных настройках не только эта галочка не держит заданного состояния. Половина из них возвращается в состояние по-умолчанию самопроизвольно, т.е. не держат заданных им параметров. Если так задумано авторами, так нафига тогда этот "рояль" нужен, если он всё равно не настраивается как хочешь?
Однако - это всё-таки глюки LO_6.x. Обойти то их можно с помощью макросов, но зачем "козе баян". LO нужно ремонтировать.

При снятии этой галочки - все прекрасно отображается и можно работать с таблицей. И при перезагрузке файла такое же поведение как в цитате - чекбокс не сохраняет своего состояния и все возвращается на сломанные лыжи

luu

Цитата: Bigor от 27 мая 2019, 15:00
Почитайте вот это. Здесь
про FB и Base, но проблемы похоже одинаковые
Спасибо! Как раз эту ветку параллельно изучаю. И Да, это мой случай:
Цитата: Kadet от  5 марта 2019, 20:32Итак, народ, я таки нашёл самую суть этой проблемы.
В расширенных настройках базы данных (Правка/Базы_данных/Расширенные_настройки) во кладке "Специальные настройки" в этом "рояле" из галочек есть самая нижняя - "Тип результирующего набора из драйвера базы данных". Чтобы база нормально работала с Firebird_ODBC она должна быть отключена. Так вот - в старой LO_5 - она отключается, а вот в новой LO_6 - нет. Сколько её не тыкай - после перезагрузки она снова включается. Если её отключить и не перегружая продолжать работать - всё работает и в 5-й и в 6-й. Однако после перезагрузки в 5-й она сохраняет отключенное состояние, а в 6-й снова самопроизвольно включается.

Это, конечно можно обойти макросом. В частности при загрузке самой БД на событие "Открытие файла" (в головной форме - Сервис/Настройка/События) у меня стоит макрос, где я отлавливаю в глобальную переменную объект головной БД  - ThisDatabaseDocument. Вот там можно макросом снять эту самую галочку:
Код:
   ThisDatabaseDocument = ThisComponent
   ThisDatabaseDocument.DataSource.Settings.RespectDriverResultSetType = false

Кстати, в этих расширенных настройках не только эта галочка не держит заданного состояния. Половина из них возвращается в состояние по-умолчанию самопроизвольно, т.е. не держат заданных им параметров. Если так задумано авторами, так нафига тогда этот "рояль" нужен, если он всё равно не настраивается как хочешь?
Однако - это всё-таки глюки LO_6.x. Обойти то их можно с помощью макросов, но зачем "козе баян". LO нужно ремонтировать.

При снятии этой галочки - все прекрасно отображается и можно работать с таблицей. И при перезагрузке файла такое же поведение - чекбокс не сохраняет своего состояния и все возвращается на сломанные лыжи

Вот эта проблема у меня тоже воспроизводится, нет возможности изменить параметры поля из Base. Пришлось воспользоваться SQLite Studio:

Цитата: Kadet от  9 марта 2019, 15:13Ещё один косяк нашёл при переходе на внешнюю БД.
Может это и не косяк, а так и должно быть, или я с настройками не разобрался.

Во-первых - таблицы внешней БД закрыты для редактирования. Раньше я предполагал, что это связано с первой проблемой (галочками в настройках), однако нет. Добавлять и удалять поля можно. Добавлять и удалять сами таблицы тоже. Редактировать нельзя. Допустим типы полей, форматы в существующих таблицах из LO Base уже никак не изменить. Однако это не так страшно. Всегда же есть SQL возможности и есть Firebird ISQL Tool. Это помогает с решением сей проблемы.

Я же верно понимаю, что косяк не в БД и не в драйвере, а в самом LO Base?

luu

Пошел дальше и снова уткнулся в препятствие.
Скажите, можно ли вообще реализовать в SQLite+Base несколько  пользователей с разными правами доступа? Т.е. чтобы один пользователь мог только вносить изменение в одно поле таблицы, а второй - в другое. Все остальные данные были бы только для чтения или недоступны вообще? Ну и "администратор" должен быть конечно с полным доступом к базе.
С чего начать? Куда смотреть?

economist

#7
luu - можно. SQLite-файл лежащий в сети LAN поддерживает 4 потока на чтение и 1 на запись, во время записи - файл лочится для всех, поэтому в ODBC драйвере стоит указать таймаут 3-5 секунд. Делаете файл ODB (один), внутри - код на StarBasic типа:

user=Environ ("USER") ' узнали кто это, безо всяких паролей и окон
if user='ivanov' then объектБД1.visible=False ' скрыли
if user='petrov' then объектБД1.enable=False ' показали, но не даем ничего менять

Несмотря на то что файл у 2, 3, 4-го пользователя откроется "на чтение" - Формы BASE будут работать и данные в базу - попадать.
Скорость сопоставима с MS Access 2007-2016. Но больше 3-х пользователей будет некомфортно (в FireBird должно быть получше).
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

luu

Спасибо за разъяснения.
Значит это, все-таки, не мой вариант. Потому что мне нужна работа 10-15 пользователей. И не в локальной сети, а через интернет.

Еще мне не совсем понятен вопрос реализации контроля доступа. Пользователи, пароли, права - это все прописывается в БД или в файле Base?
Т.е. могу ли я состряпать формы в Base, прописать логины-пароли в файле БД и потом просто всем пользователям разослать один и тот же файл odb с формой на ввод логина-пароля, для работы с ней? Или каждому придется прописывать свой?

economist

#9
Штатно ни в Base, ни в SQLite нет ничего про доступ. В FireBird, MySQL - всё это есть.

То что я написал выше - это использование Windows или NLTM или AD/LDAP-авторизации в коде Basic, внутри ODB, как один из способов простого разграничения прав, без ввода "ещё одного пароля". Файл ODB может быть один и лежать на сетевой шаре (он открывается для чтения, но работает, в т.ч. его макросы, SQL-запросы итп).

SQLite для меня безальтернативна в случаях, когда нужна скорость. На SSD она лишь на 30-50% уступает IN-MEMORY базам (себе самой или той же Pandas+Python). Но добавим 3-го пользователя - и скорость станет "обычной" для FireBird и др. В SQLite-базе можно в отдельных таблицах хранить и аккаунты/права, и SQL-запросы (хранимые процедуры), но кодить всё это придется самому.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

luu

Цитата: economist от 29 мая 2019, 13:30Штатно ни в Base, ни в SQLite нет ничего про доступ. В FireBird, MySQL - всё это есть.

В таком случае, если организовать доступ по логину-паролю в MySQL, то использовать Base как инструмент для работы с этой базой не получится? Именно в ключе разграничения прав доступа.

luu

При помощи гугла и какой-то матери прихожу к выводу, что мне нужно что-то вроде xataface, чтобы просто состряпать веб-морду для одной таблички. Но там тоже все умерло уже, похоже.
Может кто-нибудь знает что-то подобное?

Yakov

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

luu

Тогда прошу помощи наставить на путь истинный.
Сейчас пробная база на SQLite. Подключаюсь и работаю с ней через Base.

Как сделать, например, двух пользователей с разными правами? Или нужно MySQL поднимать и SQLite мне тут не помощник?

Yakov

Цитата: luu от 10 июня 2019, 17:07Или нужно MySQL поднимать и SQLite мне тут не помощник?
Лучше использовать MySQL, у SQLite нет требуемой функциональности.