0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 13
Oracle

Фильтр по нескольким полям

01.03.2012, 13:58. Показов 9057. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Использую OracleDataSet - Zayavka.
Пишу "последовательный" фильтр, (когда-то был такой вопрос, но на Acces, и там работало норма) вида:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 with DataModule2.ZAYAVKA do
    begin
      Filtered:= false;
        Filter:= '';
        if Edit1.Text<>'' then
          Filter:= Filter+'[GLAVNUI_OTVETSTVENUI] = ' + QuotedStr(Edit1.Text);
 
        if Edit3.Text<>'' then
          begin
            if Filter='' then
              Filter:= '[ZAKAZCHIK] = ' + QUOTEDSTR(Edit3.Text);
            if Filter<>'' then
              Filter:= Filter+' and [ZAKAZCHIK] LIKE '+ QuotedStr(Edit3.Text + '%');
          end;
 Filtered:= true;
выплывает ОШИБКА типа: LIKE identifier not allowed here. Подскажите, пожалуйста, как решить проблему, использовать нужно по-любому OracleDataSet, очень этим поможете!!!!
Заране благодарен!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2012, 13:58
Ответы с готовыми решениями:

Фильтр в Table'e по нескольким полям
Здравствуйте! Плиз хелп! Нужно реализовать фильтрацию записей в таблице (TTable) по одному(нескольким) полям с неточным поиском (по типу...

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

Фильтр по нескольким полям в одном Edit
Есть Table1, DBGrid1, Edit1 :) Поиск осуществляется хоть сначала, хоть с середины, без учета регистра :) НО... ищет только по полю Name1....

35
 Аватар для MrHitman47
35 / 35 / 4
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
01.03.2012, 18:47
помоему в фильтр нельзя впихивать более 1го поля, поэтому лучше использовать OnFilterRecord
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
01.03.2012, 19:00
Delphi
1
помоему в фильтр нельзя впихивать более 1го поля,
DataSet, получив строку из этого св-ва, пытается интерпретировать его просто как фрагмент SQL. При этом сколько там полей, одно или 500, он (датасет) даже не смотрит

Но почему все советуют вместо Filter использовать OnFilterRecord ?
А очень просто - используя св-во Filter, программист обязан сформулировать условия строго в рамках того стандарта SQL, на который был расчитан код, реализующий собственно сравнение т.е. некий стандарт SQL, которым руководствовались разработчики компонент Дельфи, а он (стандарт этот) может быть весьма ограничен (например кастрированным по самый кадык Local SQL), да еще и знать надо его на уровне.
Поэтому его (св-во Filter) просто игнорируют многие профи, железно верно кодируя алгоритм проверки достаточно мощными, а главное - прозрачными средствами самой Дельфи, для чего и используется соотв. событие
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
01.03.2012, 20:53
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with DataModule2.ZAYAVKA do
begin
Filtered:= false;
Filter:= '';
if Edit1.Text<>'' then
Filter:= Filter+'[GLAVNUI_OTVETSTVENUI] = ' + QuotedStr(Edit1.Text);
 
if Edit3.Text<>'' then
begin
if Filter='' then
Filter:= '[ZAKAZCHIK] = ' + QUOTEDSTR(Edit3.Text);
if Filter<>'' then
Filter:= Filter+' and [ZAKAZCHIK] LIKE '+ QuotedStr(Edit3.Text + '%');
end;
Filtered:= true
Один говно пишет.
помоему в фильтр нельзя впихивать более 1го поля, поэтому лучше использовать OnFilterRecord
А второй сверху накидывает
0
 Аватар для MrHitman47
35 / 35 / 4
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
01.03.2012, 21:28
у нас что программист тролль завелся!? или, наверно, просто тролль, если знаешь что пиши великий мудрец
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
01.03.2012, 21:47
Цитата Сообщение от MrHitman47 Посмотреть сообщение
у нас что программист тролль завелся!? или, наверно, просто тролль, если знаешь что пиши великий мудрец
и так. начнем наш урок.
КАК ПРАВИЛЬНО ВЫВЕСТИ ДАННЫЕ НА ФОРМУ!!!

Компоненты:
ADOConnection;
ADOQuery;
ADODataSet;
DBGrid;

Подключаем:
DBGrid -> ADODataSet -> ADOQuery -> ADOConnection -> БД

На ButtononClick прописываем:

Delphi
1
2
3
4
5
6
7
8
 ADOQuery1.Close;
 //Этот блок можно упустить. Просто надо запрос  прописать в свойствах компонента
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('SELECT * FROM TBL1 WHERE field1=:p1 and field2 like :p2');
 //--------------------------------------
 ADOQuery1.Parameters.ParamByName('p1').Value:='tratata';
 ADOQuery1.Parameters.ParamByName('p2').Value:='tratata%';
 ADOQuery1.Open;
Всеееееееее!!!!! Не нужно использовать ADOTable. Фильтры ТАБУ(кроме случаев если других вариантов нет).
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.03.2012, 00:02
Delphi
1
Фильтры ТАБУ
Ну зачем же так радикально ? Ножовка хорошо, конечно, но и лобзик тоже нужен
Простой пример:
Сервер удаленный. На клиент посылается сразу прличный кусок данных (например все проводки за месяц). Бухгалтеру надо выбрать и показать все с некоторым счетом по дебету. Можно, конечно, подпилить запрос и подождать пару минут (или десятков минут) пока новые усеченные данные будут доставлены клиенту. Потом этот же счет по кредиту и снова минуты.. Затем то же самое для другого счета и так раз стопятьдесят А можно использовать фильтр. Практически без задержки (фильтр на неск.тысячах записей работает практически мгновенно). Результат - программа "летает", бухгалтер не ждет, отчет в налоговую весело и в срок составляется
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
02.03.2012, 00:54
Согласен. Бывали случаи когда без фильтра не обойтись.
Но ты тоже должен понимать, что тащить большой кусок данных это глупо.
Я сомневаюсь, что оператор будет искать что-то в гриде где больше тысячи записей.
Я выводил к примеру
Oracle 11 SQL
1
rownum<20
А после того как оператор фильтровал по условию снова посылал запрос.
И твои пару минут превращаются в десятые секунды.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.03.2012, 02:13
Спорить не вижу смысла. Просто Ваша категоричность не всегда уместна.
Выше приведен достаточно веский вполне практический аргумент в доказательство
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 13
02.03.2012, 11:02  [ТС]
perepe4a
и так. начнем наш урок.
КАК ПРАВИЛЬНО ВЫВЕСТИ ДАННЫЕ НА ФОРМУ!!!

Компоненты:
ADOConnection;
ADOQuery;
ADODataSet;
DBGrid;......

perepe4a, это все понятно. я работал с Acces и эти комопненты все подходят, все получается, с тем фильтром, что я написал. Также я однажды писал, такой фильтр, где можно сразу выбирать записи из двух таблиц(все поля). там я и использовал, те парметры, через ADOQUERY, что вы пишете
....ADOQuery1.Parameters.ParamByName('p1 ').Value:='tratata';....

но я то работаю с Oracle, там даже параметры присваивается через SETVARIABLE... и там не ADO.

но мне нужно написать тот "последовательный" фильтр, который был в моем вопросе, только с помощью компонентов оракла, именно через OracleDataSet
Кто-то знает, или это слишком сложный вопрос?

Добавлено через 1 минуту
а с ADO, я-то любую задачу смогу решить
0
45 / 44 / 2
Регистрация: 06.02.2012
Сообщений: 147
02.03.2012, 11:26
Цитата Сообщение от de_Montgomery Посмотреть сообщение
я-то любую задачу смогу решить
ну так в перед и с песней!!!

Добавлено через 15 минут
из любопытства поискал OracleDataSet (ну не работал я с ним никогда)... и вот нашел:
http://www.devart.com/dotconne... mbers.html
и знаете что странно? Свойства Filter не нашел...
есть только:
"DefaultViewManager (Inherited from System.Data.DataSet) - Gets a custom view of the data contained in the DataSet to allow filtering, searching, and navigating using a custom DataViewManager." который никак не вспоминается в посте афтара....

мне одному это странным кажется?

(походу OracleDataSet -ы разные бывают...)
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
02.03.2012, 11:27
А зачем у тебя названия полей в [] ?
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 13
02.03.2012, 11:34  [ТС]
та, это неважно. я и без [] делал, та же фигня. просто если в запросе, например через то же ADOQUERY пишешь выборку поля, которое состоит из двух слов, то нужно использовать []. но в оракле, все равно как, потому как там поля должны быть по-английски и не желательны пробелы
0
45 / 44 / 2
Регистрация: 06.02.2012
Сообщений: 147
02.03.2012, 11:36
Цитата Сообщение от de_Montgomery Посмотреть сообщение
и не желательны пробелы
не желательны?!

типа если очень хочется, то можно?!
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 13
02.03.2012, 11:39  [ТС]
та если б только в пробелах было дело, steel_tiger
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
02.03.2012, 11:40
Цитата Сообщение от de_Montgomery Посмотреть сообщение
та если б только в пробелах было дело, steel_tiger
Ну да. Еще ж дело в радиусе.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.03.2012, 11:42
de_Montgomery, Ваша главная ошибка в том, что Вы к сугубо в клиент-серверном DACе пытаетесь применить методы сугубо локальные. Ну это типа с шашкой на авианосец - даже если и доплывете, то вряд ли напугаете
Похоже, что Вы пытаетесь на старого доброго конягу навешать 400мм броню и 130мм орудие, ну т.е. старую "добрую" парадокс (дбф, акцес) базу пытаетесь поселить на Оракле. Если так, то у Вас ничего не получится, -это в лучшем случае, - в худшем - получится угробище, с которым будут мучиться несчастные юзеры и в конце концов убедят начальника нагнуть Вас на полную переработку (то бишь разработку с "нуля") или, прадон, пригласить Вас на выход и взять вместо Вас человека пограмотнее и посговорчивее
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
02.03.2012, 11:49
Я вообще не понимаю какая разница Oracle, ADO компоненты?
Та хоть ПельменьConnection.
Все работает по одному и тому же принципу. Есть SQL заппрос. Передаем параметры и выполняем.
Причем на разных языках Delphi,C#,JAVA.
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 13
02.03.2012, 11:50  [ТС]
спасибо, за доходчивое, обьяснение MsGuns. мне это уже понятно=)))))))))))
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.03.2012, 12:03
Delphi
1
2
Та хоть ПельменьConnection.
Все работает по одному
Вовсе нет, но разработчики компонент таки да, пытаются придать внешние черты в соответствие с неким стандартом (Кстати, стандарты тоже разные, например у Борланда - одни, у мелгомягких - несколько иные)
И эта... perepe4a Пургу не гоните откровенную, Вас же всерьез перестанут принимать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2012, 12:03
Помогаю со студенческими работами здесь

Поиск по нескольким полям
Всем привет! Подскажите пожалуйста, как организовать поиск по нескольким полям. Причем может вводится 1-ое значение , а второе например...

Поиск по нескольким полям
что то я делаю не так... если делаю так: ADOQuery1.SQL.Clear; AdoQuery1.Sql.Add('SELECT * FROM База WHERE Наименование LIKE :nam or...

Поиск по нескольким полям
авм Добавлено через 6 минут Если не ввести временной интервал отказывается искать в БД Кто поможет разобраться? вот код : ...

Запрос по нескольким полям
Не получается сделать запрос. Если ADOQuery1.SQL.Add('SELECT*FROM БД where 1=1 '); if edit1.text&lt;&gt;'' ADOQuery1.SQL.Add(' and LIKE ...

Поиск по нескольким полям в Базе Данных
Здаствуйте, хотел бы попросить выложить пример, с поиском по нескольким атрибутам в Базе Данных. Желательно что-бы там был осуществлён...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru