Запросы. Для чего они?

Автор Ириминаге, 16 июня 2022, 16:47

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

Ириминаге

Здравствуйте! Возможно ли какое-то практическое применение запросам из пункта "Запросы" в основном окне программы, кроме просмотра?
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

kompilainenn

Запрос и нужен для просмотра, только отфильтрованного и такого вида, как вам надо
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

Сохраненные запросы можно использовать в коде по имени. Это избавляет вас от их составления программным путем. Вы подключаете их в качестве источника данных в формах, отчетах, элементах управления. Их же надо где-то создавать, редактировать.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

economist

#3
Еще про полезность SQL-запросов:

1) Во многих СУБД движках таблицы по запросам вида SELECT * FROM РЕЕСТР возвращают "таблица.поле" поля, с точкой, что очень некрасиво. Выход: пишем Запрос с алиасами:
SELECT 10 тест, N N, Дата Дата, ЦФО ЦФО, Файл Файл, Лимит Лимит, Сумма Сумма FROM РЕЕСТР - и все сразу красиво. Кстати, такой приятный синтаксис, на русском, с сочетанием имен и номеров столбцов, без кавычек/скобочек поддерживает самая быстрая и самая распространенная в мире БД SQLite. В LibreOffice она работает через ODBC и JDBC-драйвера. Поддерживает комфортную работу по сети 3-5 пользователей (как Microsoft Access примерно).

2) Запрос, лежащий в основе Именованного диапазона БД в Calc (Данные - Задать диапазон) и метод Basic doImport() - самый быстрый способ затянуть огромные данные в Calc. Данные грузятся без форматирования, а "вычисляемые" столбцы могут быть и с формулами, можно авто-добавить итоги итп. Быстрее этого способа под Calc нет, скорость не ниже чем новейший ADO в MSO.

3) Сложный запрос легко сделать, объединяя текст из нескольких простых (отлаженных заранее)

4) Запрос может что-то конвертировать с CAST(), вычислять даты/периоды, делать ветвление CASE THEN WHEN и тд. Т.е. у вас есть выбор - делать это в приложении (дольше, медленнее), или положиться на силу SQL, баз данных и мощь сервера. SQL-запрос почти невозможно написать "плохо", т.к. он само-оптимизируется при выполнении. А вот макрос сам так не делает.

5) Редактор запросов с подсветкой синтаксиса в LO - очень неплох даже по сранению с конкурентами. Главное не забывать про кнопку Выполнить SQL непосредственно, и ее аналог EscapeProcessing на Basic. Для параметрических запросов кнопку приходится отжимать, при этом что-то перестает работать. Так что не каждый запрос может сразу дать нужное, его результат нередко приходится допиливать макросами.

6) Обновление именованного запроса - единственный способ обхода бага с doImport https://lists.freedesktop.org/archives/libreoffice/2019-March/082286.html

Есть у Запросов в Base и недостаток: их список - одноуровневый, сложно ориентироваться. Когда запросов больше тысячи он еще и тормозит. Приходится вводить запросы-пустышки как "разделители" и даже импортировать запросы частями (макросом) из текстового файла.  
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ириминаге

Экономист, как всегда подробно и профессионально! Спасибо!

eeigor, а как обращаться по имени к запросу?
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

mikekaganski

Цитата: economist от 17 июня 2022, 09:47бага с doImport https://lists.freedesktop.org/archives/libreoffice/2019-March/082286.html

@economist: Ваша ссылка ведёт на email, который начинается с того, что Markus просит не обращать внимания на офтопик, цитируемый ниже; и сам офтопик голословно утверждает о наличии какого-то бага без ссылки на багрепорт:

Цитата: sos'**** we make first a QUERY because a simple  SQLstring in the
ImportDescritor only works with  OO-SQL en not with a native SQL  (this is
a bug)

Вы, впрочем, тоже не ссылаетесь на багрепорт ... но нет багрепорта - нет бага (и на самом деле возможно, что и sos, и Вы просто не знаете, какое свойство правильно использовать с нативным SQL).
С уважением,
Михаил Каганский

sokol92

#6
Продолжу тему этого "бага".

При работе с методом DoImport с базой PostgreSQL встречались случаи, когда корректный с точки зрения базы данных SQL-запрос, указанный непосредственно в свойстве SourceObject, "бракуется" LibreOffice c сообщением "Syntax error in SQL statement" (независимо от значения свойства IsNative). Например,
 Select * from test2.f_ex$oksm
По-видимому, не нравится символ "$". А такой запрос выполняется:
 Select * from test2."f_ex$oksm"

Сейчас (по прочтению "бага") попробовал сохранить первый запрос в Queries, установив опцию "Run SQL command directly". Команда Run Query не выполняется (выдается та же ошибка), но сохранению запроса это не мешает.

Теперь, если в DoImport сослаться на сохраненный запрос, то данные успешно читаются.

Напишу баг, когда придумаю, как это внятно и кратко изложить.  :)
Владимир.