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

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

01.03.2012, 13:58. Показов 8967. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru