Попытка работы с автономными формами

Автор st.inna, 8 декабря 2023, 11:19

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

economist

Если кнопки теста Ок, значит самое сложное позади.

slf4j-api-1.7.36.jar не нужен.

Вообще файл драйвера нужно дать всем, на сетевой шаре 12 Мб дергать - неправильно.

Путь класса надо в LO прописать всем.

Все ост. настройки хранятся в odb-файле, его положите на шару рядом с *.sqlite
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

По поводу ошибок "что-то там не поддерживается курсор" - это лечится одним флажком в настройках свойств БД в Base, что-то с типами возвр. значений. Я опять на телефоне и не помню.

Помните про таинственную кнопку SQL в Base - она все меняет

Данные из FireBird нужно выгрузить в SQL -формате. Это универсальный формат, по сути там тексты SQL-команд. Ими с нуля в любой пустой базе создаются пустые табл. и заполняются вашими значениями.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bigor

Цитата: economist от 29 февраля 2024, 17:26slf4j-api-1.7.36.jar не нужен.
без него не взлетает, ругается что драйвер JDBC не загружен, при проверке
Поддержать наш форум можно здесь

bigor

Цитата: economist от 29 февраля 2024, 17:32аинственную кнопку SQL в Base
если про эту, то не помогает
Поддержать наш форум можно здесь

economist

Тогда остаются флажки настройки в Base. Их не так много, можно по одному перебрать выкл/вкл (снизу) и быстро ошибка с типом курсора уйдет. Флажки хранятся в odb и настраиваются один раз.

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

bigor

Установка этого флажка решила проблему
Поддержать наш форум можно здесь

st.inna

Всем доброе утро!

Да, установка флажка убрала ошибку с курсором.

Движемся дальше...

Скопировала таблицу из базы, из которой нужно перенести данные в новую созданную базу через создание файла CSV. 

По инструкции https://progtips.ru/analiz-dannyh/import-dannyh-iz-fajla-csv-v-libreoffice-base.html вставила данные в новую базу. Как и сказано в вышеуказанном источнике, все данные перенеслись с типом данных текст и без первичного ключа (потому что на вопрос о создании ключа при копировании данных ответили "Нет"). Открываю таблицу в новой базе в режиме "Правка" и ничего поправить нельзя  :-[ . Что с этим делать? Создавать таблицы и вставлять данные через SQL муторно и не хочется...

st.inna

И что делать с ограниченным набором типов данных при создании полей таблиц?

economist

#23
Кстати, это Xerial JDBC не единственный JDBC (3+). Версия 1.36 странная, используйте свежую 3.42 или 3.45 - они "в проде".

План Б, если не осилили JDBC - доступ ч/з ODBC (Win/Lin). Только под Windows есть такая штука как ADO (самая современная). Тут скорее всего не обойтись без админов и запуска двух ODBC-утилит (под Windows), одна их которых лежит в папке с цифрами "64" (и является 32-х битной), а вторая - наоборот, в папке с "32", но будет 64-битной. Интригу до конца раскрываю в надежде на массовый JDBC-путь. JDBC-дрова есть ко всем базам данных, они работают везде и да, это Java (JRE), которую некоторые с пренебрежением не ставят из-за "болтливости" (используйте молчаливую JPortable). А зря, JDBC - это тот самый случай, когда хорошо созданный стандарт проживет еще 50 лет.

Но скорость работы всех этих "прослоек" JDBC/ODBC/SDBC/ADO/DAO итд - примерно одинакова, их задача создать подключние и передать, не коверкая (кнопкой SQL в LO Base) запрос движку БД на выполнение.

Быстрее прослоек (условно на 30%) будет работать с SQLite язык Python, потому что в нем встроена поддержка SQLite, но ее авторы LO, полагаю, незлонамеренно удалили/заглушили (легко лечится, см. Форум).

В контексте OpenOffice|LibreOffice Base с SQLite - язык Python может заметно ускорить регулярный импорт больших TXT/CSV-файлов (миллионы строк), это будет в ~5 раз быстрее "прослоек".
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

@st.inna - чтобы таблицы (любые, в любой БД) можно было интерактивно править в LO Base - Primary Key обязателен. Понимайте это так: чтобы внести новую запись, нужен "код строки" (Primary Key). В SQLite есть ROWID - это другое, но его внешнее ПО может использовать для вставки строк. И язык SQL даже в LO Base в таблицу без первичного ключа может вставить строки. Но править интерактивно такую таблицу в Base не получится.

Если не удалось обменяться таблицами в универсальном формате обмена *.sql - нужно запросами вида CREATE TABLE ... создать пустые таблицы (с PrimaryKey). Готовые CREATE TABLE ... в вашем FB (*.fdb) покажет не Base, а любое другое ПО, например DBeaver.

Первичная работа с любой БД ведется именно на языке SQL, придется преодолеть. Если бы вы сразу начали в правильной БД - эта стадия прошла бы комфортно. Создавать таблицы конструктором в Base - крайне сложно, CREATE TABLE ... по факту проще.

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

economist

Цитата: st.inna от  1 марта 2024, 08:55что делать с ограниченным набором типов данных при создании полей таблиц

Все нужные вам типы в SQLite есть - TEXT, INTEGER, REAL, NULL ('текст', 12345678901234567890, 12.345, Null)
Дата/Время - это текст в формате ISO8601 "YYYY-MM-DD HH:MM:SS.SSS" - и к этому надо привыкнуть. В Формах Base можно укоротить в "нашенский" формат 01.03.24, но только не в таблицах! Вообще с русским в SQLite нет пролем в именах таблиц и полей, но: точки запрещены, пробелы нежелательны, знаки №, символ параграфа и Ёё - работают, но вы же сами о них потом споткнетесь (например Ёё не в входит в диапазон A-я в регулярных выражениях, но 90% об этом забывают).

Если где в Интернете увидите дополнительные типы - не обращайте внимание, это "кастомные", они все равно используют 4-е базовых типа. Или нужно описывать поведение новичков (но это лишнее).

SQLite очень быстро работает с текстовыми полями, потому что внутри себя всё хранит "как текст". Не переживайте за производительность - она и так наивысшая.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

st.inna

А какой стандарт SQL используется в SQLite? И если можно, ссылку на литературу...

Элементарный запрос
SELECT current_date
возвращает: 2024

Как вывести в формате DD.MM.YYYY HH:MM?  Меняю формат самого столбца на DD.MM.YYYY HH:MM, возвращает: 16.07.1905 00:00, а при повторном запуске запроса опять "2024"

Я так понимаю, что все запросы, написанные в SQL для Firebird, нужно переписывать?

economist

#27
Стандарт SQL92 целиком, но есть дополнения, как во всех других движках.

Дока тут sqlite.org и много статей на Хабре.

Переписать придется только то что специфично. С датой пока проверить не могу

UPD: Сервис - SQL выводит текущую дату, значит драйвер и сама SQLite работают верно. Проблема в настройках Base и/или LO
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bigor

Цитата: st.inna от  1 марта 2024, 14:17Как вывести в формате DD.MM.YYYY HH:MM?
так select strftime("%Y%m%d") выводит в формате 20240301, при добавлении любого разделителя выводится только первый параметр - год
Поддержать наш форум можно здесь

economist

st.inna, что-то с выводом дат странное творится, попробуйте другой jdbc-драйвер с http://ch-werner.de (но sqlite там скорее всего древняя).

Там класс драйвера отличается:

SQLite.JDBCDriver

Обе кн. с тестами должны быть Ок. Прежний jar отключать необязательно.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...