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

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

16.04.2010, 08:04. Показов 14898. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru