Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/68: Рейтинг темы: голосов - 68, средняя оценка - 4.59
3 / 3 / 0
Регистрация: 30.03.2010
Сообщений: 60

Инкрементный поиск в DBGrid

16.04.2010, 08:04. Показов 14963. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, подскажите пожалуйста, если кто знает, как сделать быстрый поиск в DBGrid, чтоб при наборе букв с клавиатуры сразу находилась нужная запись и устанавливался курсор на нее!
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2010, 08:04
Ответы с готовыми решениями:

Перемещение по GRID (инкрементный поиск)
Есть ли стандартные средства, позволяющие , например, в Gride или COMBOBOX при наборе символов перемещаться на соответствующую запись, ...

Инкрементный патч
Здравствуйте, у меня версия ядра 3.2.68-1 решил применить инкрементный патч с сайта kernel.org версии 4.1.1.2 ввожу команду patch -p1 -i...

Инкрементный бэкап с tar
День добрый сотоварищи!) Попробовал делать инкрементный бэкап с tar на debian, но что-то у меня не заладилось (до этого пробовал...

30
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
20.05.2010, 14:23
Студворк — интернет-сервис помощи студентам
У вас вообще была интересная проблема))
У вас в таблицу выводятся данные из ADOTable1, а сортируется ADOQuery1.
просто они небыли связаны друг с другом

Цитата Сообщение от Андрей Борисови Посмотреть сообщение
if form1.ADOQuery1.RecordCount>0 then
form1.ADOTable1.Locate('Наименование', form1.ADOQuery1['Наименование'],[]);
связал
1
2 / 2 / 0
Регистрация: 18.05.2010
Сообщений: 11
20.05.2010, 16:21
У вас работает поиск? У меня по прежнему игнорируются edit'ы =(
Выделение строк выставил, соединения с базами проверил, названия тоже верны, я не знаю что делать. И можно сделать все в одном Edit'e? Я просто брал код, написанный пользователем Лисёныш.

Добавлено через 46 минут
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
if form1.ADOQuery1.RecordCount>0 then
form1.ADOTable1.Locate('Наименование', form1.ADOQuery1['Наименование'],[]);
Куда этот код вставлять?
З.Ы. У меня мораль -100, когда я туплю в прог-нии, а хочется знать дельфи на все 100% =(
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
20.05.2010, 17:57
NuRsAk, выше я привел полный код процедуры OnChange для Edit1
1
2 / 2 / 0
Регистрация: 18.05.2010
Сообщений: 11
20.05.2010, 18:03
Не получается =(
Выложите скомпилированную версию с исходниками, я не пойму. Мб это из-за различий версий Delphi? У меня 7 версия, просто на вашем скрине инспектор объектов выглядит по иному
Вложения
Тип файла: rar uchet-acs.rar (411.2 Кб, 44 просмотров)
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
21.05.2010, 07:11
ребят...
вот этот код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin
if form1.ADOTable1.RecordCount=0 then exit;
if (form1.Edit1.Text='') and (form1.Edit2.Text='') then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM Учет');
if (Length(Edit1.Text) > 0) or
   (Length(Edit2.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Наименование LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add('Наименование LIKE' + #39 + Edit2.Text + '%' + #39);
       ADOQuery1.Active := True;
       if form1.ADOQuery1.RecordCount>0 then
          form1.ADOTable1.Locate('Наименование', form1.ADOQuery1['Наименование'],[]);
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
     end;
end;
вставте ВМЕСТО того, который есть в OnChange у объекта Edit1
2
2 / 2 / 0
Регистрация: 18.05.2010
Сообщений: 11
21.05.2010, 13:33
Андрей Борисови ОГРОМНОЕ Вам спасибо за терпеливость и отзывчивость!
Немного изменил код и заработало, вот:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
begin
if form1.ADOTable1.RecordCount=0 then exit;
if (form1.Edit1.Text='') then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM Ó÷åò');
if (Length(Edit1.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Íàèìåíîâàíèå LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add('Íàèìåíîâàíèå LIKE' + #39 + Edit1.Text + '%' + #39);
       ADOQuery1.Active := True;
       if form1.ADOQuery1.RecordCount>0 then
          form1.ADOTable1.Locate('Íàèìåíîâàíèå', form1.ADOQuery1['Íàèìåíîâàíèå'],[]);
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
     end;
end;
Добавлено через 30 минут
Теперь хочу попробовать сделать поиск с использованием радиокнопок (По наименованию, по единице измерения, по цене). Если не получится буду обращаться сюда =)
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
21.05.2010, 19:43
Цитата Сообщение от NuRsAk Посмотреть сообщение
if (form1.Edit1.Text='') then exit;
ни в коем случае)
вариант:
1 эдит пустой, а во втором текст - эта строка не даст сработать
0
2 / 2 / 0
Регистрация: 18.05.2010
Сообщений: 11
21.05.2010, 20:34
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
ни в коем случае)
вариант:
1 эдит пустой, а во втором текст - эта строка не даст сработать
Странно, у меня всё работает, еще и 2-ой эдит удалил. Что то не могу разобратся с радиокнопками, ведь текст поиска у меня на событии onchange в edit1, а как теперь сделать чтобы можно было сделать поиск по другим полям?
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
21.05.2010, 22:59
Цитата Сообщение от NuRsAk Посмотреть сообщение
Query1.SQL.Add('Наименование LIKE' + #39 + Edit1.Text + '%' + #39)
так же как и тут
только по другому полю
Delphi
1
Query1.SQL.Add('Цена LIKE' + #39 + Edit1.Text + '%' + #39)
0
2 / 2 / 0
Регистрация: 18.05.2010
Сообщений: 11
22.05.2010, 13:51
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
procedure TForm1.Edit1Change(Sender: TObject);
begin
if radiobutton1.checked
then
begin
if form1.ADOTable1.RecordCount=0 then exit;
if (form1.Edit1.Text='') then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM Ó÷åò');
if (Length(Edit1.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Íàèìåíîâàíèå LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add('Íàèìåíîâàíèå LIKE' + #39 + Edit1.Text + '%' + #39);
       ADOQuery1.Active := True;
       if form1.ADOQuery1.RecordCount>0 then
          form1.ADOTable1.Locate('Íàèìåíîâàíèå', form1.ADOQuery1['Íàèìåíîâàíèå'],[]);
     end
   else
   if radiobutton2.checked
then
begin
if form1.ADOTable1.RecordCount=0 then exit;
if (form1.Edit1.Text='') then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM Ó÷åò');
if (Length(Edit1.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Åä_èçì LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add('Åä_èçì LIKE' + #39 + Edit1.Text + '%' + #39);
       ADOQuery1.Active := True;
       if form1.ADOQuery1.RecordCount>0 then
          form1.ADOTable1.Locate('Åä_èçì', form1.ADOQuery1['Åä_èçì'],[]);
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
      end;
     end;
end;
end;
end.
Вроде всё верно, но поиск с радиобаттонами у меня не получается =(
Что не так, сижу уже часа 2 ковыряюсь, а всё бестолку.
P.S. Что значит #39 ?)
0
16 / 16 / 6
Регистрация: 31.01.2011
Сообщений: 178
27.10.2013, 16:26
господа, спасибо огромное. благодаря вам еще один мученик нашел решение своей проблемы =)

Добавлено через 35 минут
зато появилась новая... в моей проге есть функция добавления записи в таблицу... после того, как я добавил код поиска добавление стало невозможным.... помогите, пожалуйста, решить проблему.
прилагаю код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
try
  if (Trim(Edit1.Text)='') then
begin
    exit;
end;
  if form1.ADOQuery1.Locate('Марка',Edit1.Text,[]) then
begin
    form1.ADOQuery1.Insert;
    form1.ADOQuery1.FieldByName('Марка').AsString:=Edit1.Text;
end;
  Edit1.Clear;
except
  on e:Exception do
end;
form1.ADOTable1.Active:=false;
form1.ADOTable1.Active:=true;
end;
Добавлено через 3 минуты
поиск записи из таблицы так же прилагаю
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Edit1Change(Sender: TObject);
begin
if form1.ADOTable1.RecordCount=0 then exit;
if (form1.Edit1.Text='') then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM МаркиАвтомобилей');
if (Length(Edit1.Text) > 0) then
     begin
       ADOQuery1.SQL.Add('WHERE Марка LIKE' + #39 + Edit1.Text + '%' + #39 +' AND ');
       ADOQuery1.SQL.Add('Марка LIKE' + #39 + Edit1.Text + '%' + #39);
       ADOQuery1.Active := True;
       if form1.ADOQuery1.RecordCount>0 then
          form1.ADOTable1.Locate('Марка', form1.ADOQuery1['Марка'],[]);
     end
   else
     begin
       ADOQuery1.Active := True;
       ADOQuery1.First;
     end;

извините за беспокойство, уже решил удалением 3-й снизу строки в коде поиска
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2013, 16:26

Инкрементный вывод результатов деления в цикле
Нужно сделать инкрементный вывод результатов деления в цикле. Например 44:11=4 и нужно чтобы к делимому и делителю каждый раз...

Как реализовать полный, дифференциальный и инкрементный бекапы?
Кто может написать как реализовать: 1)Full backup 2)Differential backup 3)Incremental backup

Поиск в DBGrid
помогите люди добрые, мне необходимо чтобы поля DBGrid отображались в DBComboBox. я осуществляю поиск по таблице и необходимо чтобы все...

Поиск по DBGrid
Объясните пожалуйста суть поиска по DBGrid. Где не посмотрю одни #,%,Like. Например человек ввел в Edit Фамилию из поля с таким же...

Поиск по DBGrid
Доброго времени суток. Имеется база данных Access через ADO. На форме DBGrid, два Edita и Combobox. Осуществляю поиск по DBGrid. Однако...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru