Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Сентябрь 2019, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Base как фронтенд для MySQL  (Прочитано 3275 раз)
0 Пользователей и 1 Гость смотрят эту тему.
luu
Участник
**
Offline Offline

Сообщений: 12


« Стартовое сообщение: 27 Май 2019, 05:41 »

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

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

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

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

LibreOffice
Версия: 6.2.3.2
Ubuntu 16.04
« Последнее редактирование: 7 Август 2019, 11:02 от luu » Записан
luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #1: 27 Май 2019, 12:45 »

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

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

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

Сообщений: 12


« Ответ #2: 27 Май 2019, 13:59 »

Скрины


* Снимок экрана от 2019-05-27 18-57-52.png (34.75 Кб, 928x1056 - просмотрено 18 раз.)

* Снимок экрана от 2019-05-27 18-58-03.png (208.53 Кб, 928x1056 - просмотрено 18 раз.)
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 650


« Ответ #3: 27 Май 2019, 15:00 »

Почитайте вот это. Здесь
про FB и Base, но проблемы похоже одинаковые
Записан
luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #4: 27 Май 2019, 16:33 »

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

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

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

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

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

При снятии этой галочки - все прекрасно отображается и можно работать с таблицей. И при перезагрузке файла такое же поведение как в цитате - чекбокс не сохраняет своего состояния и все возвращается на сломанные лыжи
« Последнее редактирование: 27 Май 2019, 16:51 от luu » Записан
luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #5: 27 Май 2019, 18:03 »

Почитайте вот это. Здесь
про FB и Base, но проблемы похоже одинаковые
Спасибо! Как раз эту ветку параллельно изучаю. И Да, это мой случай:
Итак, народ, я таки нашёл самую суть этой проблемы.
В расширенных настройках базы данных (Правка/Базы_данных/Расширенные_настройки) во кладке "Специальные настройки" в этом "рояле" из галочек есть самая нижняя - "Тип результирующего набора из драйвера базы данных". Чтобы база нормально работала с 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:

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

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

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

Сообщений: 12


« Ответ #6: 28 Май 2019, 04:00 »

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

Сообщений: 984


« Ответ #7: 29 Май 2019, 12:53 »

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 должно быть получше).
  
« Последнее редактирование: 29 Май 2019, 12:56 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #8: 29 Май 2019, 13:12 »

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

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

Сообщений: 984


« Ответ #9: 29 Май 2019, 13:30 »

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

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

SQLite для меня безальтернативна в случаях, когда нужна скорость. На SSD она лишь на 30-50% уступает IN-MEMORY базам (себе самой или той же Pandas+Python). Но добавим 3-го пользователя - и скорость станет "обычной" для FireBird и др. В SQLite-базе можно в отдельных таблицах хранить и аккаунты/права, и SQL-запросы (хранимые процедуры), но кодить всё это придется самому.
« Последнее редактирование: 29 Май 2019, 13:36 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #10: 7 Июнь 2019, 13:13 »

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

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

Сообщений: 12


« Ответ #11: 7 Июнь 2019, 15:40 »

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

Сообщений: 2 430


WWW
« Ответ #12: 7 Июнь 2019, 20:19 »

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

luu
Участник
**
Offline Offline

Сообщений: 12


« Ответ #13: 10 Июнь 2019, 17:07 »

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

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

Сообщений: 2 430


WWW
« Ответ #14: 10 Июнь 2019, 20:50 »

Или нужно MySQL поднимать и SQLite мне тут не помощник?
Лучше использовать MySQL, у SQLite нет требуемой функциональности.
Записан

Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!