Как задать и зафиксировать ширину столбцов в запросе

Автор Nil, 8 февраля 2024, 00:02

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

Nil

Создал запрос, работает.
Но в таблице результатов запроса столбцы получаются очень широкими (намного шире заголовков и данных в столбцах) и в итоге таблица результатов не помещается на экран.
Да, можно их ширину отрегулировать и таблица результатов поместится на экране, но приходится это делать каждый раз при получении результатов запроса.
Попытка задавать ширину столбцов в режиме редактирования запроса (пункт выпадающего меню "Править...") не удалась - при получении результатов запроса ширина столбцов опять большая.
Просьба подсказать - где задаётся фиксированная ширина столбцов.
Заранее спасибо!

economist

Если столбцов слишком много - они не поместятся на экран (сокращайте, обрезайте, пишите Представления/View). 

Таблица результатов SQL-запроса - для "быстро глянуть и закрыть". Гораздо важнее что видно по Ctrl+Shift+F4 в других приложениях OpenOffice|LibreOffice, куда вы вставляете результат SQL-запроса или ПоляБД для слияния/рассылки.

Тут может слегка помочь макрос, разворачивающий таблицу по ширине экрана, его лучше назначить на кнопку в документе:

sub ShowDataTableXGRIDonTopScreen
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:ViewFormAsGrid", "", 0, Array())
end sub
     

В результате табличка вверху экрана станет шире и почти все "впишется". До идеала далеко, но у конкурентов (MSO и "отеческие") - нет и этого, ни по удобству, ни по интегрированности с таблицами, текстами, рисунками и презентациями.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Nil

#2
Спасибо за ответ!

Как я понял нет способов заранее задать ширины столбцов в таблице запросов, как это можно делать у форм (когда они в табличном виде).
Сейчас я использую формы для отображения данных в имеющихся таблицах. И тут возникает новый вопрос:
 "А можно отображать результаты запроса в конкретно под него настроенной форме (в табличном виде)?"
Если "Да", то где про это можно прочитать? (Мне не удаётся найти в инете, увы, может не правильно ищу)

Upd: я не использую результаты запроса для вставки в другие документы, мне только посмотреть, но раздражает, когда таблица результатов уезжает за, в то время когда в столбцах полно пустого места по ширине.

Upd2: Всё, найден ответ на вопрос. Оказывается формы действительно можно создавать на основе запроса(-ов), а в них задать ширину столбцов не проблема. Сорри за незнание элементарного, как оказалось, но я только-только начал изучать LO_B (самостоятельно, для личных целей).

economist

Формы вы можете создавать не только в Base, но и во Writer/Calc - там они безшовно интегрируются с документами.

Для показа SQL-таблиц удобен контрол XGrid, он передает события клика по ячейкам (адрес, содержимое), которое можно тут же перехватить макросом и вернуть в "Фильтр" Формы, а значит перерисовать и саму ХGrid. Т.е. таблица становится само-фильтруемой.

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

Nil

#4
Спасибо за совет, но есть один момент - я ничего не понял, поскольку только начал изучать "базу данных" как область знаний: не владею терминологией, не юзал Writer/Calc, не представляю что такое XGrid, и чтобы "перехватывать что-то там макросом" походу надо сначала понимать, что в "нутрях базы" происходит.

Если Вас не затруднит, то просьба подсказать, как организовать запрос с параметром в полях, данные из которых берутся из связанных с главной таблицей других таблиц: чтобы при вызове запроса появлялось требование выбрать из раскрываемого списка конкретное значение поля, по которому будет выполняться поиск. Я пытался найти в инете по теме запросов, но встречаются только элементарные примеры запросов без параметров. Если подскажете ресурс/видео по этой теме буду очень благодарен.

UPD: Для "родных" полей главной таблицы в запросе  с параметрами я использую вот такие критерии (например):
[:Номер_папки]
[LIKE '%' || :Наименование || '%']
*Примечание: квадратные скобки только символизируют ячейку поля запроса в строке "Критерий"

economist

#5
LO - большой и мощный офисный пакет, цель которого автоматизация работы с документами типа текст, таблица, рисунок, презентация, в том числе вставка в них данных извне (файлы, Web, базы данных) и обратно в них же.

Base таким образом выполняет вспомогательную, админскую функцию - подключение к БД, права, отбор и возврат данных.

Base слегка заброшен, и теперь это не замена MS Access, т.к. его время ушло. Дело в том что последние 10 лет на практике стало можно (и модно) строить интерфейсы  прямо в прикладных программах Writer, Calc (Word, Excel) или вообще на web-технологиях в браузере, кроссплатформенно и мобильно. Во всех этих случаях делают Формы, состоящие из Контролов (полей, флажков, табличек XGrid, списков итд.

Но даже без Форм LO даёт универсальный доступ к БД из всех 4-х приложений по Ctrl+Shift+F4

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

Таким образом, вам нужно сначала изучить базовый  функционал Writer и Calc чтобы эффективно работать с данными из БД в документах. Base нужна лишь для создания подключения и написания пары десятков SQL-запросов, после чего вам станет ясно что нужно уходить выше, в файл документа, во Writer/Calc, чтобы взаимодействовать с юзером. Именно он будет создавать параметрические запросы к БД, добавлять в нее строки и формировать Отчёты. Кое-где не обойдется и без Макросов, ведь данные непредсказуемы и многолики.

Вывод: строить интерфейс в Base на Формах становится практически ненужным, если основная работа проводится в Writer/Calc. То есть для колл-центра, кладовщика, буха - можно все сделать в Base и его Формах. Для юриста, экономиста, менеджера - лучше делать Формы во Writer/Calc. По сути они одинаковы, меняется лишь контекст вызова.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Nil

Ох... Наверно мне изначально стоило уточнить, что я не разрабатываю софт для юзеров, я для себя, я сам буду юзером своей базы и больше никто другой.  :roll: 

Передо мной стоит совсем простая задачка. Задачка на порядок проще, чем для кладовщика/бухгалтера, поэтому я решаю её в формате Форм-Запросов (использование Word/Writer - Excel/Calc для неё нет никакой необходимости, т.к. не требуется генерация документов). Я бы с удовольствием использовал готовую структуру базы (их много всяких вариантов), но своего варианта я не нашёл, поэтому стал пробовать создать свою, а для этого пришлось начать изучать Base (выбрал LO_B поскольку бесплатная, в отличие от Access), тем паче, что решением этой задачки моё изучение LO_B прекратится, т.к. других задач просто не предвидится.

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

economist

К вопросу отображения набора строк по значению из списка:
https://wiki.openoffice.org/wiki/RU/kb/50000001
https://koi.tspu.ru/vav/vav_lab_bank/labs/office/4_Base/Base_doc/myooo/tables/

Если кратко то в Base связи контролов на Формах и данных Таблиц можно реализовать по разному:
- настройкой их Свойств (часто с подменой одного контрола другим)
- макросом, в т.ч. почерпнутым из книг Питоньяка
- готовым методом из большой библиотеки макросов Acces2Base (методы Access), которых очень много 

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