как сделать поле поиска внутри формы (без навигации самой Base)

Автор at0mix, 16 июля 2022, 11:12

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

at0mix

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

economist

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

at0mix

Огромное спасибо!
дня 4 шерстил инет - а эту статью не нашел %(
думаю что какой нибудь вариант подойдет.

at0mix

Цитата: economist от 16 июля 2022, 14:20Вот тут есть все в нескольких вариантах: https://wiki.harlamenkov.ru/wiki/RU/kb/00000359
Теперь нужна помощь - разобраться в ошибках
стоит ЛО 7.3.2.2, база firebird встроенная (как посмотреть версию не знаю)

макрос:
Sub findPK(oEvent)
   Dim oControl      'Элемент управления - источник сообщения
   Dim oForms      'Коллекция форм
   Dim oForm      'Главная форма

   oControl = oEvent.Source
   oForms = oControl.getModel().getParent().getParent()
   oForm = oForms.getByName("Список ПК")
   oForm.Filter = "'Имя ПК' like '" & oControl.Text & "*'"
   oForm.reload()
End Sub

таблица "Список ПК"
поле "Имя ПК"

Ошибка обновления текущей записи /builds/AstraOS/buildsystem/astra-build-fixes/ci__libreoffice/libreoffice-7.3.2/connectivity/source/commontools/dbtools.cxx:747

firebird_sdbc error:
*violation of PRIMARY or UNIQUE KEY constraint "INTEG_21" on table "Список ПК"
*Problematic key value is ("Имя ПК" = 'vdnpp2676') caused by 'isc_dsql_execute'
/builds/AstraOS/buildsystem/astra-build-fixes/ci__libreoffice/libreoffice-7.3.2/connectivity/source/drivers/firebird/Util.cxx:68

в навигаторе форм перенес кнопку с макросом в первый уровень - ошибка исчезла.
но выяснил что вместо поиска этот макрос работает в режиме перезаписи поля в текущей записи.
т.е. при старте в поле выводится текст из поля "Имя ПК" первой записи. если я ввожу в это поле какой либо текст - этот текст просто перезаписывает поле в текущей записи. если перейти в панели навигации на другую запись - эффект такой же.
вообще ничего не понимаю.........

sokol92

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

at0mix

Цитата: sokol92 от 27 июля 2022, 12:44Сама по себе ошибка говорит, что Вы пытаетесь добавить в таблицу запись с уникальным ключом, который уже есть в таблице.
Спасибо.
Вообще есть где-то описание расшифровок ошибок?

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

есть еще какие-либо варианты создать в форме поле поиска? ничего найти не могу подходящего......

at0mix

Цитата: sokol92 от 27 июля 2022, 12:44Понять что-то по картинкам очень сложно. Всегда лучше выложить файл-пример и описать последовательность действий, приводящих к ошибке.
Согласен. Вот сделал вырезку из рабочей базы - может у кого будет время посмотреть и ткнуть носом в ошибки ;)

в разделе Таблицы - "неделя" рабочая - просто хранит номер отчетной недели (на будущее)
"Список ПК" - основная таблица.
Формы:

- "СписокПК-кнопка" - поиск и вывод в форму найденной записи. имя ПК вводится в поле поиска, после нажатия на кнопку в основной форме должна выводиться найденная запись - не работает. плюс еще в форме не редактируются поля.

- "Список ПК-макрос" - макрос поиска. тоже не работает %( но данные редактируются

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

rami

Цитата: at0mix от 28 июля 2022, 09:12- "Список ПК-макрос" - макрос поиска. тоже не работает %( но данные редактируются
Попробуйте в макросе заменить соответствующую строчку на эту:
oForm.Filter = """Имя ПК"" LIKE '" & oControl.Text & "*'"
У меня работает.

sokol92

Спасибо за пример. Теперь мы можем поэтапно двигаться вперед.

1. В форме "СписокПК-кнопка" не редактируются поля.

Исправляем.
Заходим в режим редактирования формы, Меню / Формы / Свойства формы, вкладка "Данные". Меняем значение свойства "Анализ команд SQL" на "Да". Сохраняем форму (Ctrl+S) и закрываем.
Открываем эту же форму для показа данных. Пробуем изменить какое-нибудь поле, открытое для редактирования (например, ФИО).
Обратите внимание на инструментальную линейку внизу формы и тщательно исследуйте все кнопки. Вы должны получить ответы на большинство заданных вопросов.

Например, мы хотим выставить фильтр для просмотра всех полей, у которых поле "линукс" формы равно 1. Ищем внизу кнопку "Фильтр (Ctrl+Shift+L)", наживаем на нее. Теперь в поле "линукс" вводим 1 и внизу нажимаем кнопку "Применить фильтр". Мы видим, что в результате осталось 7 записей, у которых поле "линукс" равно 1.

Макросы на этом этапе нам не нужны.

Сделаем перерыв на освоение изложенного.
Владимир.

at0mix

Цитата: rami от 28 июля 2022, 18:10Попробуйте в макросе заменить соответствующую строчку на эту:
Код:

oForm.Filter = """Имя ПК"" LIKE '" & oControl.Text & "*'"

У меня работает.
Спасибо - учту на будущее про одинарные, двойные кавычки и экранирование %(

только тут другая засада - это работает "на посмотреть". т.е. по факту в форму подставляется ОДНА запись (или несколько если по маске выбрано) из СЕЛЕКТА. Соответственно попытка редактирования этой выбранной записи приводит к ошибке:
Ошибка обновления текущей записи /builds/AstraOS/buildsystem/astra-build-fixes/ci__libreoffice/libreoffice-7.3.2/connectivity/source/commontools/dbtools.cxx:747
Код ошибки: 1
firebird_sdbc error:
*violation of PRIMARY or UNIQUE KEY constraint "INTEG_21" on table "Список ПК"
*Problematic key value is ("Имя ПК" = 'vdnpp0171')
caused by 'isc_dsql_execute'

т.е. как поиск макрос работает, но аналога встроенного в оболочку поиска нет. а встроенный в оболочку поиск ищет запись по условию и устанавливет найденную запись (не результат выборки а именно запись!) в форме. и тогда я могу редактировать поля этой записи.

т.е. в данном случае нужно как-то сохранить внесенные в полях формы изменения и опять же макросом сделать запись этих изменений.

т.е. мою задачу - установить указатель на запись №ХХ в таблице, содержащую в поле УУ текст АА - не выполняет.....