Перейти к содержанию

Как реализовать поиск в Delphi?


Рекомендуемые сообщения

Найти игрушки, которые подходят детям от 1 до 3 лет.

Собственно это и нужно найти в базе ( в базе есть поле "Возрастные границы", в ней указывается значение. Например: 2..5 (от 2 лет до 5 лет).

Какую процедуру написать для кнопки "Поиск"?

Ссылка на комментарий

Mos

=))) жжошь шмаляй еще.

я одно не понимаю где такую траву берем.

вот надо что-то, а сами даже не понимают чего. в вопросе как правило половина ответа.

иначе только телепаты осилят этот путь.

может быть и так

select a.* from tablename a where birthday a.between 2 and 5 

хотя через параметры вернее. но думаю нет смысла о них писать, не так ли?

Ссылка на комментарий

Justice

Да, фильтрация

coder

Ну я вапще не айс в этом деле))

Нужно как можно проще))

Table1.Filtered=false;
Table1.Filter="((vozrast>2) and (vozrast<5))";
Table1.Filtered=true;

Перед этим в "варе" писать ничего не нужно?

и в этом примере, как я понял, поиск пашет только в том случае, если в поле только один символ, т.е. к примеру "5". Не так ли?

Но у меня в поле написано так: "2..5", т.е. для 2,3,4,5 лет

Ссылка на комментарий
автору нужна простая фильтрация?

мы не телепаты.

если у автора выборка в мульон записей то ... какая фильтрация на клиенте.

хотя так потом и пишут везде.

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

человек про group by не знал.

Ссылка на комментарий
и в этом примере, как я понял, поиск пашет только в том случае, если в поле только один символ, т.е. к примеру "5". Не так ли?
В том что я написал - больше двух и меньше пяти. Можно совершенно безболезненно добавить в условии равно ^_^
человек про group by не знал.
Порой какого бреда не накодишь - черт ногу сломит - и все от незнания элементарных для кого-то вещей, что уж тут поделаешь.
Ссылка на комментарий

Товарисчи, забыл самое главное, что первое значение вводиться в Edit1, а второе в Edit2. И кнопка "батон", по ней и производится фильтрация.

И диапазон может меняться, т.е. не 2..5, а например 1..3, 1..2 и.т.д.

Код будет таким?

Table1.Filtered=false;
Table1.Filter="((vozrast>Edit1.Text) and (vozrastTable1.Filtered=true;

Добавлено спустя 14 минут 3 секунды:

И ещё вопрос, как среди столбца найти наибольшее значение?

Вопрос про фильтрацию не закрыт :D

Ссылка на комментарий
Товарисчи, забыл самое главное,

жжошь ...

Table1.Filter="((vozrast>Edit1.Text) and (vozrast

таким не будет 100%

сам посмотри, что за фильтр у тебя внимательно

у тебя сравнивается со строкой Edit1.Text

vozrast>Edit1.Text, а должно быть со знанием

Table1.Filter:=Format('((vozrast>%s) and (vozrast<%s))',[Edit1.Text,Edit2.Text]);

где то так

Добавлено спустя 1 минуту 29 секунд:

как среди столбца найти наибольшее значение?

где то так

select max(fieldname) from tablename

Ссылка на комментарий

coder

Работает, но как то не так))

у меня три записи в таблице:

1..3

2..5

2..6

Фильтрую по таким пораметрам:

1..2 - фильтрует (осталось 1..3)

3..4 - не фильтрует ( а ведь подходят и 2..5 и 2..6)

Добавлено спустя 35 секунд:

Хм(для справки)... у меня в поле написано: "2..5" (с точками)

Ссылка на комментарий

Mos

мы не телепаты что у тебя... писать в конце чего у тебя это смешно.

у меня в поле написано: "2..5" (с точками)

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

если у тебя такие странные записи, то пиши фильтр так

Table1.Filter:=Format('((vozrast="%s..%s"))',[Edit1.Text,Edit2.Text]);

Ссылка на комментарий

coder

перечитай первый пост *16

в базе есть поле "Возрастные границы", в ней указывается значение. Например: 2..5

Щас попробую

Добавлено спустя 2 минуты 48 секунд:

coder

еррор

2010-04-22_205431.jpg

Ссылка на комментарий
Table1.Filter:=Format('((vozrast="%s..%s"))',[Edit1.Text,Edit2.Text]);

он не будет работать на вложенный.

в общем странный формат записи у тебя.

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

и через фильтр тут никак, разве через событие и каждую запись раскладывать.

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

т.е. раздели на два поля

Ссылка на комментарий
попроще написать

поверь, это самое простое.

тебе сейчас расскажут, что можно:

1. отсортировать и взять "верхнее" значение

2. пробежать сравнивая

3. еще чего ...

но сиквел это самое простое.

Ссылка на комментарий
нахождение максимального числа?
Form1.Table1.Close();
Form1.Query1.Close();
Form1.DataSource1.DataSet:=Form1.Query1;
Form1.Query1.SQL->Clear();
Form1.Query1.SQL->Add("Select max(a.fieldname) from tablename");
Form1.Query1.Open();
Form1.QuickRep1.Preview();

Что то типа того

Еще в QuickRep надо будет правильно параметры раскидать

Ссылка на комментарий

А кто придумал такое оригинальное хранение интервала?

Обычно используется 2 поля: минимальная и максимальная граница интервала.

Например, если таблицу обозвать Games и интервал определить полями MinAge, MaxAge, то запрос может выглядеть так:

SELECT
*
FROM
Games
WHERE
(:MinA BETWEEN MinAge AND MaxAge) OR (:MaxA BETWEEN MinAge AND MaxAge)

где :MinA и :MaxA - входные параметры, определяющие возрастные границы.

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...