Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
2 / 2 / 2
Регистрация: 14.05.2010
Сообщений: 20

AdoQuery И поиск по нескольким значениям

18.05.2010, 10:39. Показов 7993. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день Имеется у меня на форме ADOConnection1 который подключен к Бд, ADOTable1 которые подключен к ADOConnection1, DataSource1 который связан с ADOTable1 , ADOQuery1 который связан с ADOConnection1 и DataSource1, DataSource2 который связан с ADOQuery1, и DBGrid1 который связан с DataSource2,


Суть в том что я организовал поиск
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm5.Button1Click(Sender: TObject);
Var
a:Char;
begin
 
a:=#39;
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Описание_квартиры');
ADOQuery1.SQL.Add('WHERE Метро   like' + a + '%' + Edit1.Text +  '%' + a);
ADOQuery1.Active:=True;
end;
end.
Это дело замечательно ищет из таблицы Описание квартиры записи в столбце метро(записи заношу в Edit1) и выводит всю строку в DBGrid1,
Но мне надо чтобы он еще искал в этой же таблице (Описание_квартиры)и по другим столбцам (Город, район, Количество комнат, Площадь, Цена) и выдавал результат поиска в DBGrid1 , как бы получается поиск по 6 Edit(ам).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2010, 10:39
Ответы с готовыми решениями:

Обработка по нескольким значениям из ADOQuery (для выделенной в DBGrid строки)
Здравствуйте, возникли затруднения при выполнении определенной задачи в приложении. Есть небольшая БД, содержащая данные по...

Поиск по нескольким значениям
Доброе утро всем. Ребята такой вопрос как сделать поиск сразу по нескольким значениям Если к примеру в поисковой строке указать...

Поиск по нескольким значениям VBA
Добрый день, форумчане! Устроился стажером в компанию для выполнения задачи по автоматизации работы с документооборотом. Суть в...

26
 Аватар для dasha_fenko
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 23
15.05.2013, 19:59
Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM tblOrderBy');
if (Length(Edit1.Text) > 0) or
   (Length(Edit2.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Stend_ID LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add(' Block_ID LIKE' + #39 + Edit2.Text + '%' + #39);
       ADOQuery1.Active := True;
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
     end;
0
16.05.2013, 10:30

Не по теме:

Не думаю, что ТС ждал ответ 3 года...

0
0 / 0 / 1
Регистрация: 15.08.2013
Сообщений: 13
15.08.2013, 15:56
Цитата Сообщение от dasha_fenko Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM tblOrderBy');
if (Length(Edit1.Text) > 0) or
   (Length(Edit2.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Stend_ID LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add(' Block_ID LIKE' + #39 + Edit2.Text + '%' + #39);
       ADOQuery1.Active := True;
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
     end;
Приветствую всех! У меня похожая проблема только Edit-ов несколько: Edit1, Edit2, Edit3

Но пользователь в запросе может заполнить не все Edit.Text . Как быть? Пробую так:
Delphi
1
2
3
4
5
6
 
 Query2.SQL.Add('select *');
 Query2.SQL.Add('FROM "BAZA.DBF"');
 if (Length(Edit1.Text) > 0) then Query2.SQL.Add('WHERE pole1 LIKE '''+'%' + Edit1.Text+'%''');
 if (Length(Edit2.Text) > 0) then Query2.SQL.Add('WHERE pole2 LIKE '''+'%' + Edit2.Text+'%''');
 if (Length(Edit3.Text) > 0) then Query2.SQL.Add('WHERE pole1 LIKE '''+'%' + Edit3.Text+'%''');
В этос случае с одним Edit.Text получается, а если с двумя и более?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
15.08.2013, 16:20
Пробегаем циклом по вашим Edit'ам и формируем условие отбора в переменную s:
Delphi
1
2
3
4
5
6
7
8
9
10
11
...
Query2.SQL.Add('select *');
Query2.SQL.Add('FROM "BAZA.DBF"');
s:='';
for i:=1 to 3 do
  if TEdit(FindComponent('Edit'+IntToStr(i))).Text<>'' then
    begin
      if length(s)=0 then s:=s+' WHERE' else s:=s+' AND';
      s:=s+' pole'+IntToStr(i)+' LIKE '+#39+'%'+TEdit(FindComponent('Edit'+IntToStr(i))).Text+'%'+#39;
    end;
Query2.SQL.Add(s);
0
0 / 0 / 1
Регистрация: 15.08.2013
Сообщений: 13
15.08.2013, 17:38
Цитата Сообщение от Waddonator Посмотреть сообщение
Пробегаем циклом по вашим Edit'ам и формируем условие отбора в переменную s:
Delphi
1
2
3
4
5
6
7
8
9
10
11
...
Query2.SQL.Add('select *');
Query2.SQL.Add('FROM "BAZA.DBF"');
s:='';
for i:=1 to 3 do
  if TEdit(FindComponent('Edit'+IntToStr(i))).Text<>'' then
    begin
      if length(s)=0 then s:=s+' WHERE' else s:=s+' AND';
      s:=s+' pole'+IntToStr(i)+' LIKE '+#39+'%'+TEdit(FindComponent('Edit'+IntToStr(i))).Text+'%'+#39;
    end;
Query2.SQL.Add(s);
Спасибо за ответ! Я прошу прощенья, но названия полей pole1, pole2, pole3 я привел для примера. На самом деле названия уникальные и перебрать цыклом по названиям не получается.
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
15.08.2013, 17:42
DizeLyaka, например, можно названия полей загнать в какой-либо массив. Тогда:
Delphi
1
2
3
4
5
6
 var massiv:array[1..3] of string;
...
massiv[1]:='pole1'; massiv[2]:='pole2';massiv[3]:='pole3';
...
s:=s+' '+massiv[i]+' LIKE '+#39+'%'+TEdit(FindComponent('Edit'+IntToStr(i))).Text+'%'+#39;
...
0
0 / 0 / 1
Регистрация: 15.08.2013
Сообщений: 13
15.08.2013, 19:14
Большое спасибо - работает!

Единственная проблема на числовых полях выдает ошибку "type mismatch in expression"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2013, 19:14

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

Как выполнить поиск одновременно по нескольким значениям документа
в общем задача такая: имеется база. в ней есть документы которые заносятся строго по определенному шаблону. необходимо найти нужную...

Выборка по нескольким значениям
Добрый день, друзья. Собственно ситуация такая: На фильтре из checkedComboBoxEdit1-a выбираю к примеру несколько значений (ставлю...

Фильтрация по нескольким значениям
Я хочу провести фильтрацию поля таблицы TDB по нескольким значениям. Есть Dbf1.Filter:='AVERAGESCORE = '+DBComboBox2.Text; Как...

Отбор по нескольким значениям.
Здравствуйте, уважаемые форумчане. Если тема моя повторяется, то не судите строго, ткните носом туда &quot;где уже было&quot;. Честно...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru