Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2015, 11:52   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию SQL-запрос, поиск по базе

Хочу сделать поиск по нескольким полям одновременно, например вывести все записи где в полях edprou или Kontr есть слово "агент"
пробовал так:
Код:
 qry1.SQL.Add('SELECT * FROM Kontr  WHERE  edprou like :par1 OR Agentu LIKE :par1  ');
и так:
Код:
qry1.SQL.Add('SELECT * FROM Kontr  WHERE  edprou like :par1 UNION ALL SELECT * FROM Kontr  WHERE Agentu LIKE :par1  ');
Выводит совпадения только по полю которое стоит в запросе первым(в данном случаи edprou)
Подскажите как правильно сделать запрос?

Последний раз редактировалось Konstantin_ua; 20.07.2015 в 16:57.
Konstantin_ua вне форума Ответить с цитированием
Старый 20.07.2015, 12:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

OR замени на AND
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2015, 12:18   #3
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
 qry1.Parameters.ParamByName('par1').Value:='%'+Edit1.Text+'%';
 qry1.SQL.Add('SELECT * FROM Kontr WHERE (edprou LIKE + :par1) OR (Agentu LIKE :par1)');
Iron Monk вне форума Ответить с цитированием
Старый 20.07.2015, 14:51   #4
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
Код:
 qry1.Parameters.ParamByName('par1').Value:='%'+Edit1.Text+'%';
 qry1.SQL.Add('SELECT * FROM Kontr WHERE (edprou LIKE + :par1) OR (Agentu LIKE :par1)');
проверил, работает так же как и в моем примере.

Цитата:
Сообщение от Stilet Посмотреть сообщение
OR замени на AND
Тогда будет выбирать записи с одинаковыми значениями полей а мне нужно что бы хотя б одно из двух(или оба) было равным заданному параметру.

Последний раз редактировалось Stilet; 20.07.2015 в 16:50.
Konstantin_ua вне форума Ответить с цитированием
Старый 20.07.2015, 15:50   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
OR замени на AND
Бан за флуд.
Vapaamies вне форума Ответить с цитированием
Старый 20.07.2015, 16:51   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Тогда будет выбирать записи с одинаковыми значениями полей а мне нужно что бы хотя б одно из двух(или оба) было равным заданному параметру.
У тебя в топе написано:
Цитата:
вывести все записи где в полях edprou и Kontr есть слово "агент"
Ключевой союз я подчеркнул. Смекаешь?
Цитата:
Бан за флуд.
Еще раз такое напишешь - так и сделаю в отношении тебя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2015, 16:57   #7
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
У тебя в топе написано:

Ключевой союз я подчеркнул. Смекаешь?

Еще раз такое напишешь - так и сделаю в отношении тебя.
Понял, неправильно сформулировал вопрос, сейчас исправлю, но все же хотелось узнать решение.
Konstantin_ua вне форума Ответить с цитированием
Старый 20.07.2015, 17:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вообще-то решение Iron Monk должно сработать...
Если нет то:
Код:
 qry1.SQL.Add('SELECT * FROM Kontr  WHERE  '
   +'(edprou like '+QuotedStr('%'+Edit1.Text+'%')
   +') OR (Agentu LIKE '+QuotedStr('%'+Edit1.Text+'%') +')');
Хотя бы для проверки. И наверное нужно учитывать регистр, я не в курсе как твоя БД настроена.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2015, 17:27   #9
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вообще-то решение Iron Monk должно сработать...
Если нет то:
Код:
 qry1.SQL.Add('SELECT * FROM Kontr  WHERE  '
   +'(edprou like '+QuotedStr('%'+Edit1.Text+'%')
   +') OR (Agentu LIKE '+QuotedStr('%'+Edit1.Text+'%') +')');
Хотя бы для проверки. И наверное нужно учитывать регистр, я не в курсе как твоя БД настроена.
Все начало работать после того как убрал параметры и подставил напрямую значения с едита. Может в запросе можно один параметр только один раз использовать?
Konstantin_ua вне форума Ответить с цитированием
Старый 20.07.2015, 17:29   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
Цитата:
WHERE edprou like :par1 OR Agentu LIKE :par1
попробуй ТАК WHERE edprou like :par1 OR Agentu LIKE :par2

Для ADO не стоит задавать одинаковые параметры. Даже если это одно и тоже значение!
Поскольку значение будет подставлено будет только для первого вхождения.

Цитата:
Выводит совпадения только по полю которое стоит в запросе первым
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос к базе Инна_Никитина Помощь студентам 14 09.01.2013 22:24
Программа на заказ (нужен SQL запрос, который будет объединять всех игроков в базе в один Alias) SeveNDragonS Фриланс 0 04.08.2011 04:55
SQL - запрос к базе Джиган PHP 2 03.06.2011 17:08
sql запрос к базе sashonk SQL, базы данных 8 01.09.2010 11:11
SQL запрос в Delphi к базе в Access Самец_Original БД в Delphi 1 22.05.2010 13:05