Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 14

Сделать фильтр по значению

04.11.2013, 23:31. Показов 4925. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пожалуйста, кому не трудно, объясните что должно быть внутри кавычек,
Delphi
1
adoquery.filter:=''
есть таблица .mdb в которой есть колонка статус (частное лицо, ИП, ООО), нужно сделать фильтр по значению, как это можно реализовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2013, 23:31
Ответы с готовыми решениями:

Как в DBGrid сделать фильтр?
Подскажите пожалуйста, как сделать так, чтобы в DBGrid`e строки отображались только, например, с одинаковыми названиями улиц? Ну проще...

Можно ли сделать запрос по неполному значению?
Здравствуйте, подскажите пожалуйста, можно ли сделать запрос по неполному значению. Например: есть значения в бд 123.456 и 123.789. Задать...

Как сделать фильтр на заголовке дбгрида?
Чтоб по щелчку на заголовке грида таблица сортировалась по тому полю. У меня в таблице ФИО Дата Следующая дата ...

16
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
05.11.2013, 05:59
Сложно нажать F1 и в хелпе посмотреть?
The filter expression below displays only those rows where the State field is "CA" or "MA":

State = 'CA' OR State = 'MA'
Delphi
1
2
3
4
5
6
with ADODataSet1 do begin
  Filtered := False;
  Filter := 'State = ' + QuotedStr('CA') + ' OR ' +
    'State = ' + QuotedStr('CA');
  Filtered := True;
end;
0
0 / 0 / 0
Регистрация: 07.01.2019
Сообщений: 2
07.01.2019, 10:42
добрый день, подскажите, как убрать фильтр не со всей таблицы а только с определенной колонки как в 1С ( с учетом того что фильтр применим по нескольким колонкам) .

ставлю фильтр:

Delphi
1
2
3
ADOQuery1.filtered:=false;
ADOQuery1.Filter:='VidUzlaDF = '+QuotedStr('ОС');
ADOQuery1.Filtered:= true;
но так же я ставлю фильтр и на другую колонку

Delphi
1
2
3
ADOQuery1.filtered:=false;
ADOQuery1.Filter:='SatusRA= '+QuotedStr('В работе');
ADOQuery1.Filtered:= true;
Соответственно все работает, но снять фильтр я могу только полностью с таблицы:

Delphi
1
ADOQuery1.Filter:=False;
как снять фильтр только с одной колонки не могу понять, перерыл весь инет, похожих проблем не нашел.
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
07.01.2019, 10:46
Господи, и этот бред сивой кобылы кочует из темы в тему...
Query - это SQL-запрос, в котором мы получаем только те данные, которые нам нужны и в том порядке, который нам нужен. Какой, к черту, тут может быть еще фильтр... Хоть чуть-чуть то надо матчасть учить!!!
0
0 / 0 / 0
Регистрация: 07.01.2019
Сообщений: 2
07.01.2019, 10:58
Господи, и этот бред от админов, качует с ветки на ветку. Зачем раздувать это на несколько сообщений?

1. Не знаешь - не отвечай.
2. Есть куда направить почитать- направь.
3. Есть примеры исполнения другим способом - покажи.
3. Нечего сказать -молчи.


Что у вас за болезнь у админов ? Ну направьте хоть куда нибудь где почитать если знаешь, больше текста тратишь.
0
07.01.2019, 12:10

Не по теме:

Ох, молодняк... Даже пункты пронумеровать не в состоянии...
Выбираю пункт 3, который 2, его вторую часть... Лучше и правда мимо пройти...

0
5950 / 4526 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
08.01.2019, 00:42
Цитата Сообщение от D1973 Посмотреть сообщение
Какой, к черту, тут может быть еще фильтр... Хоть чуть-чуть то надо матчасть учить!!!
ну есть там фильтр) есть и даже в книжках описан

Stimul1985,
ты немного не понимаешь как оно все работает
смотри
Delphi
1
s:=1
в переменной 1
Delphi
1
s:=2
в переменной стало 2

так же и с твоим фильтром
Delphi
1
ADOQuery1.Filter:='VidUzlaDF = '+QuotedStr('ОС');
фильтр по одной колонке

Delphi
1
ADOQuery1.Filter:='SatusRA= '+QuotedStr('В работе');
тут уже фильтр по другой

Цитата Сообщение от Stimul1985 Посмотреть сообщение
Соответственно все работает, но снять фильтр я могу только полностью с таблицы:
не с таблицы, а с последней отфильтрованной колонки

а если сделать так?
Delphi
1
ADOQuery1.Filter:='VidUzlaDF = '+QuotedStr('ОС') and 'SatusRA= '+QuotedStr('В работе');
это уже фильтр по двум колонкам

что бы снять один из них нужно убрать одно из условий
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
08.01.2019, 05:31
Цитата Сообщение от qwertehok Посмотреть сообщение
ну есть там фильтр) есть и даже в книжках описан
Кто бы спорил, что он там есть... Все таки это наследник TDataSet... Вопрос-то в другом совсем: он там нафиг не нужен! Вместо того, чтобы корячить фильтра разномастные - проще и правильнее запрос сформулировать так, как надо и получить то, что надо...
0
Заблокирован
08.01.2019, 09:06
qwertehok -Спасибо тебе большое за отзывчивость!

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

Нет, конечно я могу написать запросы и вытягивать данные которые мне нужны, но разве мой вопрос был об этом?
Я думал мне не придется объяснять и рассусоливать, думал просто получу ответ от компетентных людей, пусть даже с небольшой критикой, но не лютый негатив в котором будут обвинять меня в не компетентности и тупизне. Да, я не лютый программер, но разве не для этого существуют форумы, что бы что то обсуждать, помогать дуг другу, не? Я же написал что перешерстил весь инет и не нашел нужных ответов, и только после этого задал вопрос, то есть я не просто так побеспокоил ваше величество, а проделал изначально какую то работу. (вышенаписанное адресовано админу)


Почему я не использую запросы:
Ну во первых я изначально написал программу где мне это не нужно было, у меня была одна колонка с меняющимся статусами которые динамически создавались в CheckListBoxе и при необходимости я фильтруюсь так, как мне нужно, (Что то на подобии фильтра в Excel, обвел в скрине желтым цветом внизу ). в верху на скрине отметил желтым то, что я пытаюсь внедрить, несколько чекбоксов и кнопку ОК (Я не разобрался как вставить изображение в тело сообщения, потому скрин3 во вложении).
а во вторых мне просто лень было прописывать все поля у меня их 100. (скрины 1 и 2 во вложении).
Что то переделывать мне уже не хотелось, а при запросах не корректно начинает работать CheckListBoxе с создаными строками для фильтрации

собственно по одной колонке фильтр работает корректно, но если ставить фильтр на вторую то он автоматом отменяет фильтр с первой колонки.


Delphi
1
='VidUzlaDF = '+QuotedStr('ОС') and 'SatusRA= '+QuotedStr('В работе')

Нет, данный метод ругается еще на моменте компиляции, да, это я все пробовал. В справке ничего подобного нет.


код кнопки "ОК" при переключении чекбоксов, относящиеся к одной колонке все работает, но если использовать сразу две, то все как то путается, работает как попало.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
begin
 
 F1:='';
  F2:='';
   F3:='';
    F4:='';
 
 
 if RadioButton3.Checked=true then
 begin
 F1:='ОС';
 F2:='ОС';
 end;
 if RadioButton4.Checked=true then
  begin
 F1:='ОС';
 F2:='нет';
  end;
 if RadioButton5.Checked=true then
  begin
 F3:='в работе';
 F4:='в работе';
  end;
 if RadioButton6.Checked=true then
  begin
 F3:='выполнено';
 F4:='выполнено';
  end;
 if RadioButton7.Checked=true then
  begin
 F3:='в работе';
 F4:='выполнено';
  end;
 
 
ADOQuery1.filtered:=false;
ADOQuery1.Filter:='VidUzlaDF ='+QuotedStr(F1)+ ' OR ' +  'VidUzlaDF ='+QuotedStr(F2) + ' OR ' +  'StatusUzlaDF ='+QuotedStr(F3)+ ' OR ' +  'StatusUzlaDF =' +QuotedStr(F4);
ADOQuery1.Filtered:= true;
Миниатюры
Сделать фильтр по значению   Сделать фильтр по значению   Сделать фильтр по значению  

0
5950 / 4526 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
08.01.2019, 15:51
Цитата Сообщение от Stimul1988 Посмотреть сообщение
Нет, данный метод ругается еще на моменте компиляции
ошибку в студию

Цитата Сообщение от D1973 Посмотреть сообщение
проще и правильнее запрос сформулировать так, как надо и получить то, что надо...
ну запрос то он потянет данные из БД, а если запрос сложный - зачем перетягивать?
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
08.01.2019, 16:06
Цитата Сообщение от qwertehok Посмотреть сообщение
ну запрос то он потянет данные из БД, а если запрос сложный - зачем перетягивать?
Ну, базара нет, проще 100500 записей полностью перетянуть из БД на клиента, а потом фильтровать...
Тем более, что фильтр, насколько я помню, не поддерживает составные конструкции типа AND и OR...
0
5950 / 4526 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
08.01.2019, 16:15
Цитата Сообщение от D1973 Посмотреть сообщение
насколько я помню, не поддерживает составные конструкции типа AND и OR
вот тут

есть пример
Delphi
1
ADOQuery.Filter:='KeyTovar=13 or keytovar=17';
Добавлено через 42 секунды
Цитата Сообщение от D1973 Посмотреть сообщение
проще 100500 записей полностью перетянуть из БД на клиента
а если запрос работает 20 минут и выдает 100 строк
где проще отсортировать?
0
Заблокирован
09.01.2019, 01:57
ошибку в студию
при компиляции ошибку убрал, сам затупил.

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

Delphi
1
2
3
ADOQuery1.filtered:=false;
ADOQuery1.Filter:= (('VidUzlaDF =' + QuotedStr(F1)+ ' OR ' + 'VidUzlaDF =' + QuotedStr(F2)) + ' And ' + ('StatusUzlaDF =' + QuotedStr(F3)+ 'OR' + ' StatusUzlaDF =' + QuotedStr(F4)));
ADOQuery1.Filtered:= true;
Если везде использовать только 'OR' то все работает, если использовать фильтр только по одной колонке, если использовать фильтр по двум колонкам то он оставляет все данные от последнего применимого фильтра, т.е. если я по первой колонке отфильтровался только по "ОС" все ок, но если добавляю второй фильтр, то он он фильтрует, не из уже отфильтрованного, а с общей номенклатуры, при этом добавляя в первую колонку ненужные данные и не убирая со своей колонки лишние.

Delphi
1
2
3
ADOQuery1.filtered:=false;
ADOQuery1.Filter:= (('VidUzlaDF =' + QuotedStr(F1)+ ' OR ' + 'VidUzlaDF =' + QuotedStr(F2)) + ' OR' + ('StatusUzlaDF =' + QuotedStr(F3)+ 'OR' + ' StatusUzlaDF =' + QuotedStr(F4)));
ADOQuery1.Filtered:= true;
Миниатюры
Сделать фильтр по значению   Сделать фильтр по значению   Сделать фильтр по значению  

0
Заблокирован
09.01.2019, 01:58
Цитата Сообщение от Stimul1990 Посмотреть сообщение
And
хотел просто жирным выделить, что то пошло не так.
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
09.01.2019, 06:06
Цитата Сообщение от qwertehok Посмотреть сообщение
а если запрос работает 20 минут и выдает 100 строк
В таком случае сколько времени займет перетягивание всех данных на клиента?
0
5950 / 4526 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
09.01.2019, 08:12
Цитата Сообщение от Stimul1990 Посмотреть сообщение
то выходит ошибка "Аргумент имеет не верный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"
там есть какая-то фишка с синтаксисом
поиск по словам "delphi adoquery filter"
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
09.01.2019, 08:45
1.
Цитата Сообщение от Stimul1990 Посмотреть сообщение
QuotedStr(F3)+ 'OR'
строчки слиплись

2. но фильтр все равно надо делать в условии SQL WHERE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2019, 08:45
Помогаю со студенческими работами здесь

Как сделать фильтр (компонент TDBLookupComboBox)
Здравствуйте, подскажите пожалуйста про компонент TDBLookupComboBox, а именно: можно ли с помощью него сделать фильтр? Например, если...

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

Как сделать фильтр для stringgrid
Добрый день. Пишу курсовую работы, а именно базу данных. Нужна помощь в создании фильтров при помощи элемента ComboBox. В самой таблице...

Фильтр по значению из XML
Имеется документ в формате XML, примерно такого вида: <?xml version="1.0" standalone="yes"?> <DataSetStudents> ...

Фильтр по значению DateTimePicker
sourceship.Filter = "Date_list like " + dateTimePicker1.Value + "%"; this.shippingDataGridView.DataSource = sourceship; есть вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru