Проблема с представлением из сторонней базы данных

Автор meat_12237, 13 июля 2025, 11:39

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

meat_12237

Приветствую.

Использую Sqlite через JDBC драйвер.

Составляю представление с агрегатной функцией group_concat(). Вместо текста в поле возвращается цифра "0".

При этом SQL запрос из "Сервиса" обрабатывается без проблем. В DB Browser for SQLite представление обрабатывается тоже без проблем. Проблема где-то в Base. Данные из этого представления используются в полях Writer.

Пробовал сделать результат текстом через cast() - не помогло.

Подскажите, пожалуйста, как заставить/обхитрить Base, чтобы он принял от представления текст ?

sokol92

#1
Давайте для ясности использовать английские термины.
View (представление) - запрос (объект), созданный в базе данных . Для SQLite синтаксис создания View описан здесь.
После создания Вы можете использовать View в конструкциях FROM вместо имени таблицы.

Query - текст запроса, который сохраняется непосредственно в .odb файле.

Создание View всегда является предпочтительным вариантом, тем более в персональной (практически) базе данных. На Вашей картинке - Query. Не используйте Query, выбирайте данные из View.
Владимир.

mikekaganski

Кмк, на скриншоте как раз View (в режиме Switch Design View Off).

Если выбор формата столбца Текст не помогает, приложите пример ODB для тестирования.
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 13 июля 2025, 15:51Кмк, на скриншоте как раз View
Согласен, зрение подвело...

Тогда почему бы не добавить View через команду SQL?
Владимир.

meat_12237

На рисунке именно View (представление). Query в русскоязычной версии называется "запрос".

Base для представлентя сам добавляет create view. Еще Base добавляет drop для удаления предшествующего view.

В DB Browser for SQLite все выглядит правильно.

Интерфейс Base для ввода представления и запроса выглядит одинаково.

Проблема все та же - вместо текста вижу ноль.

sokol92

#5
Цитата: mikekaganski от 13 июля 2025, 15:51Если выбор формата столбца Текст не помогает, приложите пример ODB для тестирования.

и, разумеется, файл .db (.sqlite).

Как называется View в SQLite?

А у Вас тексты из "обычных" таблиц SQLite отображаются корректно?
Владимир.

economist

Попробуйте убрать все кавычки и собрать строку через || без GROUP_CONCAT(), с/без нажатия на кнопку [SQL].

Типизация в SQLite утиная, поэтому пробуйте в Свойствах БД (ПКМ по лев-ниж углу окна) убрать вообще все флаги, проверить с рестартом LO, а затем с флагом внизу пор типы данных из БД.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

Я бы разделил проблему на части.

1. Проблемы, связанные с функционированием SQLite.
В DBeaver (или в каком-нибудь аналоге) создаем View и отлаживаем SQL-запросы.

2. Проблемы, связанные LO.
Читаем данные из View (из пункта 1).
Владимир.

meat_12237

Цитата: sokol92 от 13 июля 2025, 17:29А у Вас тексты из "обычных" таблиц SQLite отображаются корректно?

Да, корректно.

Цитата: economist от 13 июля 2025, 18:30Попробуйте убрать все кавычки и собрать строку через || без GROUP_CONCAT(), с/без нажатия на кнопку [SQL].

Возвращается 0.

Цитата: economist от 13 июля 2025, 18:30Свойствах БД (ПКМ по лев-ниж углу окна) убрать вообще все флаги, проверить с рестартом LO, а затем с флагом внизу пор типы данных из БД.

ПКМ ничего не дала. Пробовал снимать флаги через "Правка", "База данных", "Расширенные настройки". Не помогло.

Цитата: sokol92 от 13 июля 2025, 19:24В DBeaver (или в каком-нибудь аналоге) создаем View и отлаживаем SQL-запросы.
Не пробовал, но очень сомневаюсь, что сможем перехватить SQL запрос, т.к. sqlite безсерверная база. К тому же прямые SQL запросы из меню "Сервис" отрабатываются без проблем.

Прилагаю архив (*.sqlite файл форум отказался принимать).

meat_12237

Поясню структуру:

Для "ИД_АОСР" из "АОСР" устанавливаются связи с "АОСР_Проекты", "АОСР_Материалы", "АОСР_Лаборатории", "АОСР_Схемы", "АОСР_Нормативы". Из этих таблиц устанавливаются связи через соответствующий "ИД_..." с "Проекты", "Материалы", "Лаборатории", "Схемы", "Нормативы".

С помощью представлений для "ИД_АОСР" создаются перечни проектов, материалов и т.д.

В "Приложения_Перечень" получаем перечень приложений. В "Приложения_Перечень_№" нумеруем строки. В "Приложения_Перечень_АОСР" собираем нумерованные строки в записи для "ИД_АОСР".

Все перечни собираем в "Выход_АОСР". "Выход_АОСР" является источником для полей документа Writer.

economist

#10
Кмк Base не понимает отдаваемый драйвером текстовый тип данных и коверкает его в числовой 0. Что еще можно попробовать:

1) другой, старый 32-битный JDBC-драйвер http://www.ch-werner.de/javasqlite/javasqlite-20110827-win32.zip с 32-битным LO, напр. с этим& https://www.libreoffice.org/download/portable-versions/ С ним точно таких проблем не было. По хорошему его надо пересобрать по инструкции со свежим SQLite.

2) свежий 32/64-битный ODBC-драйвер, оттуда же (с любым свежим офисом). ODBC-драйвер требует установки и прав админа, и еще важно не запутаться с 32/64-бит версией апплета, создавая подключение. 32-битный тут %windir%\syswow64\odbcad32.exe.
А вот тут 64-битный: %windir%\system32\odbcad32.exe  - чтобы никто не догадался.

Не стоит использовать кириллицу в путях SQLite, но можно в таблицах и именах полей. Пробелы нежелательны, если хочется поменьше писать кавычек. Представления (Views) можно создавать прямыми SQL в Base или в DBeaver etс, разницы быть не должно. Решение проблемы точно существует.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

#11
Это просто баг. Причём вначале всё идёт хорошо, и текстовый тип (12) нормально возвращается драйвером. А потом что-то происходит, и при подготовке грида тот же вызов метода драйвера для той же колонки даёт 2 (нумерик).

Баг-репорт бы...
С уважением,
Михаил Каганский

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

Не знаю, не уверен. Но это неважно для начального составления бага. Его всё равно невозможно создать пока что на стороне драйвера, даже если проблема там - ты просто не опишешь метод воспроизведения без ЛО.
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 14 июля 2025, 10:50текстовый тип (12) нормально возвращается драйвером

Может быть, проблема в типе данных View "Выход_АОСР".
DBeaver для проблемных полей тип определяет как ANY.

Владимир.