Topic: Выборочный поиск по базе

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

А теперь вопрос.
Как можно реализовать что бы пользователь вводил нужный размер, а в таблице оставались только материалы которые будут равные или большего размера?

(то есть сравнить нужно ширину с шириной, длину с длиннай, а потом накрест ширину с длинной и длину с шириной).

Надеюсь понятно описал

Сапсибо огромное за помощь!

Re: Выборочный поиск по базе

Фильтр через SQL-запрос:

SELECT * FROM LIST
WHERE 
( LIST.WIDTH >= :WIDTH AND LIST.HEIGHT >= :HEIGHT )
OR
( LIST.WIDTH >= :HEIGHT AND LIST.HEIGHT >= :WIDTH )

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

https://myvisualdatabase.com/help_ru/bu … query.html

Визуальное программирование: блог и телеграм-канал.

Re: Выборочный поиск по базе

Спасибо за ответ!
Я читал про запросы. Но что то пока не получается.
Рад что иду в нужном направлении. Буду пробовать!

Re: Выборочный поиск по базе

Да, все верно. Этот функционал реализован в кнопке, Action = SQL-запрос

Визуальное программирование: блог и телеграм-канал.

5 (edited by Serenada 2024-03-07 12:34:31)

Re: Выборочный поиск по базе

Это мне понятно.
Я попробую решить эту проблему.
Уж совсем начинающие у меня знания по SQL
Если не получится, то будет ли возможность у вас оказать помощь.
Я прикреплю сюда базу

Re: Выборочный поиск по базе

Serenada wrote:

Я прикреплю сюда базу

Для составления запроса достаточно изображения схемы данных.

Визуальное программирование: блог и телеграм-канал.

7 (edited by Serenada 2024-03-26 10:43:50)

Re: Выборочный поиск по базе

Спасибо за помощь. Запрос создать удалось и он даже работает (почти smile )

SELECT Pieces.id,Pieces.id_type,Pieces.id_density,Pieces.id_color,Pieces.height,Pieces.weight FROM Pieces
WHERE  
     (Pieces.id_type = {searchType})
     AND
     (Pieces.id_density = {searchDensity})
     AND
     (Pieces.id_color = {searchColor})    
     AND
    ((Pieces.height >= "{btn_search_1}" AND Pieces.weight >= "{btn_search_2}")
    OR                                                       
    (Pieces.height >= "{btn_search_2}" AND Pieces.weight >= "{btn_search_1}"))

Но чем дальше, тем больше вопросов:

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

2. Как свести в выводе результата Родительскую таблицу с дочерней.
То есть у меня 3 дочерние таблицы type, density и color.
В запросе отображается ее id. Я понимаю почему, но не знаю как "поженить" ее с дочерней.

Помогите пожалуйста.

Post's attachments

Attachment icon scr-2.png 20.58 kb, 3 downloads since 2024-03-26 

Re: Выборочный поиск по базе

Все о "сводничестве" и "женитьбе"
https://oracleplsql.ru/joins-sqlite.html
- https://www.w3schools.com/sql/sql_join.asp
- https://zametkinapolyah.ru/zametki-o-my … elect.html

Re: Выборочный поиск по базе

Сначала отвечу на второй вопрос - используйте JOIN для соединения таблиц:

SELECT 
  p.id, t.edType, d.edDensity, c.edColor, p.height, p.weight  
FROM pieces p
LEFT JOIN type t ON t.id = p.id_type
LEFT JOIN density d ON d.id = p.id_density
LEFT JOIN color c ON c.id = p.id_color
WHERE
...

Ответ на первый вопрос сложней. И есть два пути решения: 1) усложнять запрос  2) создавать сам запрос с помощью скрипта

Усложнение состоит в том, что для каждого элемента нужно предусмотреть значение по умолчанию, которое бы отменяло  условие элемента, например:

Pieces.height >= {btn_search_1}

заменить на

( (Pieces.height >= {btn_search_1}) OR ( {btn_search_1} is NULL  )

и так для каждого условия.


Вариант со скриптом предполагает, что вы включаете нужные строки в запрос только в том случае, если они содержат значение, отличное от пустого. Решение привязывается к конкретным названиям компонентов формы. Для того, чтобы я смог его написать для вас, приложите ваш проект .

Визуальное программирование: блог и телеграм-канал.

Re: Выборочный поиск по базе

Спасибо большое. Приложу завтра. Сегодня попробую сам решить задачу. Огромное Спасибо!!!

Re: Выборочный поиск по базе

Привет Serenada, Konstantin, Sparrow,
Возможно, вы также можете добиться этого, используя стандартную функцию поиска вместе с вычисляемыми полями.
Во вложении, как и в других «фильтрах поиска», вы можете ввести минимальные необходимые размеры (неважно, вводите ли вы сначала высоту или ширину).
Возможно, это даст вам больше идей.
С уважением,
Derek.

Post's attachments

Attachment icon sheetfed printing.zip 450.14 kb, 26 downloads since 2024-03-27 

12 (edited by Serenada 2024-03-28 05:33:33)

Re: Выборочный поиск по базе

Привет! Круто! База по структуре один в один моя. Вот только выдает ошибку.
А разве в функции поиска будет сравниваться не точное значение?
Мне нужно что бы находило куски материала большего, чем мне нужен.
Я так понимаю это в скрипте прописано, но, увы, не работает. Может будет минутка у вас поправить или скащать почему.
Спасибо огромное!

Post's attachments

Attachment icon Screen.png 34.56 kb, 2 downloads since 2024-03-28 

Re: Выборочный поиск по базе

Привет Serenada
Программа будет отображать только те строки данных, размеры которых больше или равны измерениям поиска, введенным вами в качестве критериев фильтра.
Пожалуйста, взгляните на снимки экрана во вложении, чтобы показать, как должна работать программа.
Скриншот 1: без фильтров
Снимок экрана 2: отображаются только строки, в которых одно из измерений больше или равно введенному значению.
Снимок экрана 3: отображаются только строки, в которых оба размера больше или равны одному или другому введенному значению.
Снимок экрана 4: отображаются только строки, цвет которых равен выбранному цвету.
Сообщение об ошибке, которое вы получаете, связано с «интернационализацией»; в некоторых странах используется '.' в качестве десятичного разделителя в других странах используется «,»; программа написана так, чтобы принимать '.' как десятичный разделитель, потому что я живу в Англии. К сожалению, я не могу повторить проблему.
Хотя это не решение, попробуйте программу, используя '.' вместо ',' и это должно работать.
Для постоянного решения, возможно, кто-то, кто также использует «,» в качестве десятичного разделителя, может предложить некоторую помощь.
С уважением,
Derek.

Post's attachments

Attachment icon serenada screen shots.zip 140.04 kb, 21 downloads since 2024-03-28 

Re: Выборочный поиск по базе

Да, Derek прав -  ошибка из-за разделителя (точки/запятой), но я пока не смог исправить...

Визуальное программирование: блог и телеграм-канал.

15 (edited by sparrow 2024-03-28 14:20:05)

Re: Выборочный поиск по базе

Hi Derek, Константин

procedure getpiece (Sender: TObject);
begin
  if form1.edit1.Value <= form1.edit2.value then
    begin
      form1.edit3.text := replacestr(form1.edit1.text, decimalseparator, '.');
      form1.edit4.text := replacestr(form1.edit2.text, decimalseparator, '.');
    end  else
    begin
      form1.edit3.text := replacestr(form1.edit2.text, decimalseparator, '.');
      form1.edit4.text := replacestr(form1.edit1.text, decimalseparator, '.');
    end;
end;

16 (edited by Serenada 2024-03-29 12:10:12)

Re: Выборочный поиск по базе

Мучал мучал и не домучал. Все сломал и сделал заново ))))
Помогите пожалуйста!

PS  База derek заработала. Может ее переделаю. Всем большой пасиб!

Post's attachments

Attachment icon beta_start_2.1.rar 375.55 kb, 21 downloads since 2024-03-29 

Re: Выборочный поиск по базе

ВСЕМ СПАСИБО ЗА ПОМОЩЬ!
Работу сделал.
Получилось огонь!