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

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

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

st.inna

Цитата: economist от  1 марта 2024, 17:03попробуйте другой jdbc-драйвер с http://ch-werner.de (но sqlite там скорее всего древняя)

Добрый день!

Если я правильно поняла, там версии для Windows, у меня linux. 

Всем Мастерам и Гуру огромная просьба: для "чайника" очень сложно ориентироваться на ссылки, которые Вы даете. Заходишь на сайт, а там черт голову сломит... ПОЖАЛУЙСТА, указывайте конкретно что нам нужно скачивать.

И все-таки, кто-нибудь может указать ссылку на нормально работающий драйвер, без приколов в работе с датами и адекватным SQL, а то какой запрос не пытаюсь сделать, ни одной функции не знает...

economist

#31

Какие функции кроме "датых" не работают? Возможно стоит смотреть в сторону ODBC-дров (под Linux должны работать в UnixODBC)
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

st.inna

Цитата: economist от  4 марта 2024, 17:26Возможно стоит смотреть в сторону ODBC-дров

Добрый день!

Вы говорили ранее, что настройка ODBC- драйвера делается через администраторов. Вот уж через кого не хотелось бы! Поэтому и понравилась идея настройка работы без них.

Цитата: economist от  4 марта 2024, 17:26Какие функции кроме "датых" не работают?

Например, простой запрос:

SELECT CASE WHEN "HOUR" >= 0 AND "Time_1" < 6
                THEN 'Доброй ночи'
 
         WHEN "HOUR" >= 6 AND "Time_1" < 12
          THEN 'Доброе утро'
 
         WHEN "HOUR" >= 12 AND "Time_1" < 18
          THEN 'Добрый день'
 
         ELSE 'Добрый вечер' END AS "Приветствие"
 
    FROM
    (SELECT CAST(Strftime('%H', time('now', 'localtime')) AS INT) AS "HOUR" )

выдает "0", хотя если его же делать через SQL, то все получается. Но мне то нужно, чтобы это работало в запросе, на основе которого я формирую отчет...

economist

Под Windows старый JDBC c сайта ch-werner.de c датами работает хорошо (скрин), но реализация драйвера двухкомпонентная jar+dll, а значит она в Linux не заработает.

А вот JDBC SQLite Driver от Xerial работает, но в в какой-то момент перестал работать с датами (судя по всему и в Win, и в Lin). Возможно это LO Base неправильно парсит результат, ведь "прямой" SQL отрабатывает верно (а значит и все макросы в OpenOffice|LibreOffice будут работать с SQLite корректно.

grep '^ sudo:. * $' / etc / group | cut -d: -f4Вы себя видите в консоле при запуске этой команды?
Возможно UnixODBC у вас получится и с текущими правами настроить. Просто делайте все в свое "домашней" директории. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

st.inna

Цитата: economist от  5 марта 2024, 12:45Вы себя видите в консоле при запуске этой команды?

Ответ такой:
grep: /: Это каталог
grep: etc: Нет такого файла или каталога
grep: /: Это каталог
grep: group: Нет такого файла или каталога

А это команда для Linux?

Как настроить ODBC? И где его скачать?

rami

Цитата: st.inna от  5 марта 2024, 11:16Например, простой запрос:

SELECT CASE WHEN "HOUR" >= 0 AND "Time_1" < 6
                THEN 'Доброй ночи'
 
        WHEN "HOUR" >= 6 AND "Time_1" < 12
          THEN 'Доброе утро'
 
        WHEN "HOUR" >= 12 AND "Time_1" < 18
          THEN 'Добрый день'
 
        ELSE 'Добрый вечер' END AS "Приветствие"
 
    FROM
    (SELECT CAST(Strftime('%H', time('now', 'localtime')) AS INT) AS "HOUR" )

выдает "0", хотя если его же делать через SQL, то все получается. Но мне то нужно, чтобы это работало в запросе, на основе которого я формирую отчет...
Откуда взялся Time_1 в наших краях в запросе?

выдает "0"? у меня срабатывает ветка ELSE 'Добрый вечер' из-за непонятного "Time_1", но если 'Добрый вечер' форматируется как число, получится "0".

Если вы хотите узнать в какой диапазон попадает текущее время, наверно, должен быть такой запрос:
SELECT CASE
WHEN "HOUR" BETWEEN 0 AND 6 THEN 'Доброй ночи'
WHEN "HOUR" BETWEEN 6 AND 12 THEN 'Доброе утро'
WHEN "HOUR" BETWEEN 12 AND 18 THEN 'Добрый день'
ELSE 'Добрый вечер'
END AS "Приветствие" FROM (SELECT CAST(Strftime('%H', time('now', 'localtime')) AS INT) AS "HOUR");

economist

#36
Цитата: rami от  5 марта 2024, 16:14наверно, должен быть такой запро

rami, хорошо что вы подошли. Ваш запрос корректно работает в LO 5-6-7-24 для Windows с JDBC-драйвером от ch-wherner.de, но некорректно выдает "0" при работе со свежим JDBC-драйвером от https://github.com/xerial/sqlite-jdbc, который сейчас единственный из обновляющихся, при сохранении как Запрос в Base. Но в прямом режиме Base - Сервис - SQL - Выполнить - все опять работает даже с новым драйвером от Xerial. Т.е. проблема в Base или драйвере, сбивающем с толку Base.

Ошибка возникает именно при выводе результата (парсинге) дат и времен из текстовых строк формата ISO (именно в нем штатные sqite-функции DATE() TIME() CURRENT_DATE() отдают свои результаты).
Камнем преткновения становятся символы - и :  как будто их забыли экранировать в регулярке и они стали разделителем

Что с этим делать - понятно: писать баг в оба адреса, в ветку LO Base и на Xerial. И ждать.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

Цитата: st.inna от  5 марта 2024, 15:05grep: etc: Нет такого файла или каталога

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

bigor

Цитата: economist от  5 марта 2024, 16:38А что у вас Линукс импортозамесный?
Астра у нее, насколько я помню по предыдущим постам. Ваш запрос некорретно работает
Поддержать наш форум можно здесь

economist

Цитата: bigor от  5 марта 2024, 16:49Ваш запрос некорретно работает

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

bigor

я про это grep '^ sudo:. * $' / etc / group | cut -d: -f4
Поддержать наш форум можно здесь

st.inna

Добрый день!

Вчера у знакомого пытались подключиться в базе данных PostgreSQL. Подключиться получилось - видны таблицы. А вот запросы так же не работали.

Судя по тому сколько просмотров у темы, людей все-таки интересует возможность настройки в многопользовательском режиме. А мы как-то остановились ни не чем...

Что пробовать дальше?

economist

#42
Запросы не работают целиком при ненажатой кн. SQL (т.е. Base их портит для всех движков, кроме встроенныъ HSQLDB и FireBird).

А в случае с JDBC от Xerial - Base портит не SQL-запрос, а его результат, связанный с дата/время, при выводе результата.

Base самый заброшенный пакет, помощь может и не прийти. Для того чтобы настроить UnixODBC в Астре - скорее всего понадобится помощь сисадминов, потому что там будет что-то типа https://jedai108.blogspot.com/2011/07/libreoffice-base-mysql-jdbc-odbc-ubuntu.html

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

sokol92

#43
Цитата: st.inna от  6 марта 2024, 10:44А вот запросы так же не работали.

Цитата: economist от  6 марта 2024, 13:03Запросы не работают целиком при ненажатой кн. SQL (т.е. Base их портит для всех движков, кроме встроенныъ HSQLDB и FireBird).

Небольшое уточнение для PostgreSQL.
Содержащиеся в файле базы данных (.odb) запросы (queries) могут выполняться в двух режимах:
1. С предварительным разбором в компоненте Base. Если Base "считает", что в запросе есть ошибка, то выдается соответствующее сообщение и запрос не отсылается базе данных.
2. Без предварительного разбора компонентой Base. В этом случае запрос "как есть" отсылается базе данных.
За выбор режиме в интерфейсе пользователя при редактировании запроса отвечает кнопка SQL (с птичкой).

При работе с PostgreSQL практически все запросы нужно выполнять во 2-м режиме.

Если мы хотим макросом результат выполнения запроса занести в электронную таблицу, то единственным эффективным методом является doImport. При этом мы не должны в параметре aDescriptor (см. baseImportDescriptor) в свойстве SourceType указывать com.sun.star.DataImportMode.SQL (1), то есть, непосредственно задавать текст SQL запроса, поскольку у нас нет возможности задать режим выполнения без предварительного разбора (похоже, свойство IsNative при работе с PostgreSQL не выполняет своих функций). То есть, сначала создаем query (без предварительного разбора) и далее ссылаемся на него.

См. также tdf#115049.

При работе с формами и отчетами в Свойствах формы на вкладке "Данные" в случае задания SQL-запроса обязательно указываем "Анализ команд SQL" - Нет.
Владимир.

st.inna

Всем добрый день!!!

Наплевав на некорректную работу "дат" в LO BASE с JDBC-драйвером, решила проверить действительно ли теперь все будет работать в многопользовательском режиме.

По указанным выше в данной теме инструкциям, на втором компьютере сохранила два файла драйвера в home/data, прописала их в "Путь класса". Далее Пуск-Base-Соединиться с сущ.БД (выбрала JDBC) - в классе драйвера: org.sqlite.JDBC (драйвер загружен успешно), в jdbc указала сетевой путь к файлу *.sqlite (соединение успешно) - Создала файл *.odb.  По итогу: на сетевом ресурсе есть файл *.sqlite. На обоих компьютерах есть два свои файла *.odb, сохраненные в home/data, и которые подсоединены к *.sqlite.

Открываю на обоих компьютерах свои файлы *.odb. Все данные в таблицах вижу. Вношу данные на обоих компьютерах - сохранение в файл *.sqlite идет только с того компьютера, который свой файл *.odb открыл вторым. По итогу НИКАКОГО многопользовательского режима нет!!! Читать одновременно - да, можно, а вносить данные - только с одного компа, который свою первую запись стал делать вторым. Такой же режим работы можно добиться через автономные формы без всяких JDBC-драйверов, с той лишь разницей, что там сохраняется запись того компа, который стал первым сохранять свои внесенные данные.

Я что-то делаю не так при попытке работать с двух компов в одновременном режиме? Или вы многопользовательским режимом называете когда "один (неизвестно кто) сохраняет, а другие (понятия об этом не имея) только смотрят"? Для меня многопользовательский режим: "все своё сохраняют и видят то, что другие сохранили, работая параллельно". JDBC так может?