Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.72
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
#1

Как сделать поиск по всем столбцам в таблице? - Delphi БД

29.12.2012, 21:16. Просмотров 5518. Ответов 23
Метки нет (Все метки)

Написал простую программу, которая выводит таблицию из базы данных dbm, сделал поиск в программе, но этот поиск ведется почему-то только в одном столбце "Имя", как сделать так, чтобы поиск был по всем столбцам таблиции? - Фамилия, Имя, Отчество и т.д..
Delphi
1
2
3
4
5
6
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
fs:=fs+key;
dbgrid1.DataSource.DataSet.Locate('Имя', fs, [loPartialKey]);
StatusBar1.Panels.Items[0].Text:='Ищем: '+fs;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 21:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать поиск по всем столбцам в таблице? (Delphi БД):

MS Access Как в dbgrid сделать сортировку по столбцам и поиск? - Delphi БД
Есть таблица в которой есть столбцы по которым возможна сортировка путем переключения radiobuttona с именем столбца.

Как в делфи после подключения БД Acess Сделать поиск по таблице - Delphi БД
Как в делфи после подключения БД Acess Сделать поиск по таблице Добавлено через 4 минуты procedure TForm1.FindEditChange(Sender:...

Delphi и access. Поиск и замена по всем по всем строкам - Delphi БД
Всем доброго времени суток!! Кто может подсказать, как мне найти строки с определенным значением, по определенному столбцу и заменить...

Как можно сделать в стандартном DBgrd сортировку по столбцам? - Delphi
Здравствуйте. Такой вопрос: как можно сделать в стандартном DBgrd сортировку по столбцам (кликая на заголовок столбца) не используя...

Как сделать удаление по строкам в таблице - Delphi БД
Ребят подскажите пожалусто как сделать удаление по строка в таблице БД

как сделать последовательный перебор по записям в таблице? - Delphi БД
Уважаемые программисты! Поможите кто может! Мне нужно сделать последовательный перебор по записям в таблице с помощью метода Locate. Пишу...

23
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
29.12.2012, 22:21 #2
В Delphi есть справка (help), где, в частности, приводится пример использования метода Locate для поиска по нескольким полям:
Delphi
1
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
30.12.2012, 13:00  [ТС] #3
Цитата Сообщение от Скандербег Посмотреть сообщение
В Delphi есть справка (help), где, в частности, приводится пример использования метода Locate для поиска по нескольким полям:
Delphi
1
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
Я еще новичок в delphi, поэтому мне сложновато разобраться в справке.

вот так я сделал:
Delphi
1
2
3
fs:=fs+key;
dbgrid1.DataSource.DataSet.Locate('Фамилия;Имя', fs, [loPartialKey]);
StatusBar1.Panels.Items[0].Text:='Ищем: '+fs;
Нажимаю запустить проект, проект запускается, но как только начинаю вводить буквы, выскакивает нижеприведенная ошибка, жму "ОК", у меня выделяется вот эта строка:
Delphi
1
StatusBar1.Panels.Items[0].Text:='Ищем: '+fs;
.
0
Миниатюры
Как сделать поиск по всем столбцам в таблице?  
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
30.12.2012, 13:27 #4
Так не пойдет.
Надо в разных компонентах TEdit отдельно ввести: в одном фамилию, в другом имя (в третьем, если надо, что-то другое).
Затем в процедуре, которая запускается по нажатию кнопки (кнопку эту надо разместить на форме и создать процедуру обработки ее события OnClick), выполнить поиск;
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  dbgrid1.DataSource.DataSet.Locate('Фамилия;Имя', VarArrayOf([Edit1.Text, Edit2.Text]), [loPartialKey]);
end;
Именно так происходит поиск по нескольким полям.

Поиск по набору - это немного другая история и по двум и более полям ее не делают.
1
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
30.12.2012, 22:12  [ТС] #5
А можно через форму поиск сделать? Если да, то, что в "ОК" прописать, и как результат увидеть?

Примерно вот так:
0
Миниатюры
Как сделать поиск по всем столбцам в таблице?  
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
30.12.2012, 22:38 #6
Можно, но получится громоздко, мало эффективно. Для пользователя такой поиск очень неудобен.
Как правило, TEdit'ы, в которые вводятся тексты для поиска, находится на той же форме, где и DBGrid, в котором отображаются результаты поиска.
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
31.12.2012, 12:08  [ТС] #7
Цитата Сообщение от Скандербег Посмотреть сообщение
Так не пойдет.
Надо в разных компонентах TEdit отдельно ввести: в одном фамилию, в другом имя (в третьем, если надо, что-то другое).
Затем в процедуре, которая запускается по нажатию кнопки (кнопку эту надо разместить на форме и создать процедуру обработки ее события OnClick), выполнить поиск;
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  dbgrid1.DataSource.DataSet.Locate('Фамилия;Имя', VarArrayOf([Edit1.Text, Edit2.Text]), [loPartialKey]);
end;
Именно так происходит поиск по нескольким полям.

Поиск по набору - это немного другая история и по двум и более полям ее не делают.
Скажите пожалуйста, я Вас правильно понял, что для каждого столбца таблице нужно на форме разместить по TEdit`у ?
Если да, то как тогда поместить 9 TEdit, или 15 может быть столбцов, на форме?
Или как то можно связать все столбцы в один TEdit?
0
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
31.12.2012, 12:18 #8
Понятно, что 15 едитов не размещают на форме.
Если поиск происходит по любой, но одной колонке (а именно так и делают поиск в основном), то достаточно и одного едита.
А управление поиска по колонкам можно сделать либо через RadoButtons, либо по ComboBox, в которых
элементы - это имена полей. Пользователь выбирая какой-либо элемент, тем самым выбирает и
поле, по которому будет происходить поиск.

Таким образом, на форме, в общем случае, максимум будет три компонента:
TEdit для ввода строки поиска;
TRadoButtons или TComboBox для выбора поля поиска;
TButton для запуска процесса поиска.
1
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
31.12.2012, 15:05  [ТС] #9
Я разместил на Форме TEdit, DBCombaBox и TButton. В свойстве ITems, компонента DBCombaBox, ввел названия столбцов. А сейчас как эти три компонента можно объединить? Как пункты DBCombaBox связать со столбцами таблици? чтоб в выпадающем списке, пункт "Фамилия" относился к столбцу "Фамилия" и т.д.?
0
Миниатюры
Как сделать поиск по всем столбцам в таблице?  
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
31.12.2012, 15:19 #10
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  dbgrid1.DataSource.DataSet.Locate(ComboBox1.Text, Edit1.Text, [loPartialKey]);
end;
TDBComboBox здесь не нужен, достаточно и TComboBox'а.
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
31.12.2012, 21:55  [ТС] #11
Почему ошибка?:
Delphi
1
dbgrid1.DataSource.DataSet.Locate(Edit1.Text, ComboBox1.Text, [loPartialKey]);
0
Миниатюры
Как сделать поиск по всем столбцам в таблице?  
Скандербег
894 / 853 / 203
Регистрация: 07.08.2012
Сообщений: 2,389
31.12.2012, 22:04 #12
Наверное потому что надо поменять местами компоненты:
Delphi
1
dbgrid1.DataSource.DataSet.Locate(ComboBox1.Text, Edit1.Text, [loPartialKey]);
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
31.12.2012, 22:42  [ТС] #13
Цитата Сообщение от Скандербег Посмотреть сообщение
Наверное потому что надо поменять местами компоненты:
Delphi
1
dbgrid1.DataSource.DataSet.Locate(ComboBox1.Text, Edit1.Text, [loPartialKey]);
Поменял местами, но не помогло.....
0
droider
Delphist, DataBase Dev
Эксперт Pascal/Delphi
4254 / 2303 / 473
Регистрация: 04.10.2012
Сообщений: 8,328
01.01.2013, 08:55 #14
Не найдено поле с именем "Мамура". Добавьте его.
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 266
01.01.2013, 13:48  [ТС] #15
Цитата Сообщение от droider Посмотреть сообщение
Не найдено поле с именем "Мамура". Добавьте его.
Что значит, нет поле? Вот посмотрите, у меня в таблице есть столбец "Имя", в котом занесено имя Петр, набираю это имя в поиске, нажимаю найти, и у меня выскакивает эта же ошибка.
А как-то связывать пункты выпадающего меню со столбцами таблицы не нужно?
0
Миниатюры
Как сделать поиск по всем столбцам в таблице?   Как сделать поиск по всем столбцам в таблице?  
01.01.2013, 13:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2013, 13:48
Привет! Вот еще темы с ответами:

Как сделать запрос к таблице созданной на винте? - Delphi
Я создал таблицу в базе данных, но не на сервере а на своем компе. Пытаюсь сделать к ней запрос через ADO и BDE, но выдается ошибка что...

Как сделать, чтобы счетчик в таблице был по порядку - Delphi БД
При добавлении новой записи счетчик присваивает записи нвоый код. как только удаляем этот код он больше не использует. Возможно ли его как...

Поиск по всем полям - Delphi БД
Приветствую. Такая задача стоит: Есть таблица, в ней 12 полей. По 9 из них нужно вести поиск таким образом, чтобы данные для поиска...

Поиск по всем полям в БД - Delphi БД
Как сделать поиск по всем полям в базе данных( DBGrid)


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.