Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16

Поисковик в Grid

04.04.2012, 21:01. Показов 2060. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
загвоздочка получилась. БД подключена с помощью компонентов ADOTable, DataSourch, ADOConnection(DataModule6). как можно организовать поисковик в Grid(Form2) или хотя бы чтоб отсеивалось не нужное при вводе в Edit? Код или хотя бы ссылки киньте на что то похожее. К завтрашнему дню надо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2012, 21:01
Ответы с готовыми решениями:

Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп <Grid.ColumnDefinitions> и <Grid.RowDefinnitions>?
Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп &lt;Grid.ColumnDefinitions&gt; и &lt;Grid.RowDefinnitions&gt;?

Поисковик Google перенаправляется на поисковик Mail.ru
Приветствую! Видел здесь много подобных тем с просьбой не применять написанное для других - для себя, поэтому пишу сам. Неделю назад...

А кроме Data Grid есть еще какой-нибудь Grid?
Вопрос конечно тупой, но что-то смотрю и не вижу. Или может не туда смотрю. Одним словом торможу. Опять же раньше был в VB такой...

4
1 / 1 / 0
Регистрация: 04.04.2012
Сообщений: 20
05.04.2012, 00:01
Для начала подготовим модуль данных. В нем нам потребуется создать глобальную переменную ed, чтобы мы могли передавать в нее текст из компонента Edit1:
Delphi
1
2
3
var
  fDM: TfDM;
  ed: String; //текст из Edit1
Этого действия можно было бы избежать, если бы компонент ADOTable, подключенный к таблице LichData, располагался на главной форме. Но поскольку он находится в модуле данных, то и событие onFilterRecord будет сгенерировано в нем. А в этом событии нам нужно будет знать, что в данный момент находится в поле ввода Edit1. Именно для этого и нужна глобальная переменная ed.
Далее выделяем TLichData, то есть, компонент ADOTable, подключенный к таблице LichData. На вкладке Events (События) инспектора объектов найдите событие onFilterRecord и дважды щелкните по нему, сгенерировав процедуру. Полный листинг процедуры:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
{onFilterRecord главной таблицы}
procedure TfDM.TLichDataFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  s : String; //для значения поля
begin
  //получаем столько начальных букв из поля Фамилия,
  //сколько букв имеется в переменной ed:
  s := Copy(DataSet['Фамилия'], 1, Length(ed));
  //делаем проверку на совпадение значений:
  Accept := s = ed;
end;
Здесь в переменную s попадает столько начальных букв из поля "Фамилия", сколько букв содержит в данный момент компонент Edit1 на главной форме (эти буквы мы передадим в переменную ed чуть позже). Если текст в переменной sсовпадает с текстом из поля Edit1, то переменной Accept присваивается True, и запись принимается. Иначе запись отфильтровывается. Не забудьте сохранить проект.
Далее перейдем в главную форму. Нужно удалить весь текст из события onChange компонента Edit1, и вписать новый:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
{Изменение поиска по фамилии}
procedure TfMain.Edit1Change(Sender: TObject);
begin
  //если в поле Edit1 есть хоть одна буква,
  if Edit1.Text <> '' then begin
    fDM.TLichData.Filtered := False; //отключаем фильтр
    ed := Edit1.Text; //передаем в fDM новый текст
    fDM.TLichData.Filtered := True; //включаем фильтр
  end
  //если букв нет, фильтрацию отключаем:
  else fDM.TLichData.Filtered := False;
end;
Вот и все. Что же тут у нас происходит? Как только пользователь введет хоть одну букву, срабатывает событие onChangeкомпонента Edit1. Если в Edit1 есть хоть одна буква, то мы вначале отключаем фильтрацию, отменяя прошлый фильтр, если он был. Затем мы передаем в глобальную переменную ed, расположенную в модуле данных, текст из Edit1. Далее снова включаем фильтр. При этом срабатывает событие onFilterRecord нашей таблицы, и в этом событии сравнивается текущее значение переменной ed и записей поля "Фамилия".
0
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16
05.04.2012, 05:49  [ТС]
спасибо)
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
05.04.2012, 13:56
Вот это жесть.
А свойство Filter у компонентов TDataSet к коим относится ADOTable вам чем не угодило?
0
15 / 15 / 2
Регистрация: 04.04.2012
Сообщений: 53
05.04.2012, 19:54
1 способ поиска-подцепляешь на форму кнопку и edit, в который вписываешь занчение для поиска
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
// НАЧАЛО ПОИСКА
var
Familya:string; 
b1:boolean;
begin
b1:=true;
     Familya:=Edit1.Text;
      if (Edit1.Text<>'') then
      begin
      b1:=adoTable.Locate('UserName;Otdel',
      VarArrayOf([Familya,Otdel]),
      [loCaseInsensitive,loPartialKey]);
      end;
      if b1=false then
      MessageDlg('По запросу ничего не найдено.'+#13, mtInformation,[mbOK],0)
end;
2 способ поиска-подцепляешь adoquery к tadoconnection
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var
i1,k:integer;
begin
    adoQuery.SQL.Clear;
    adoQuery.SQL.Add('SELECT * FROM ТАБЛИЦА WHERE ПОЛЕ_ПО_КОТОРОМУ_ИЩЕШЬ LIKE "%'+Edit1.Text+'%"');     //поиск по любому совпадению, если на до по начальным буквам-после Like пишешь "%'+Edit1.Text+', если по конечным-+Edit1.Text+'%"', если по полному полю-+Edit1.Text+'
    adoQuery.Open;
    adoQuery.First;
    for k:=1 to adoQuery.RecordCount do
     begin
      i1:=adoQuery.Fields.Fields[0].Value;    //0-означает 1 поле по которому поиск происходит, т.е. 1 поле в твоей таблице. в данному случае оно ключевое
      b1:=adoTable.Locate('КЛЮЧЕВОЕ_ПОЛЕ',i1,
      [loCaseInsensitive,loPartialKey]);
     end;
    end;
ФИЛЬТРАЦИЯ
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
 
S1: string; // выражение фильтрации
      begin
       S1:=''; // выражение фильтрации
      if (Edit1.Text<>'') then
      S1:=S1+'ИМЯ_ПОЛЯ LIKE ' + #39 + '%' + Edit1.Text + '%' + #39;
      adoTable.Filter:=S1;
      adoTable.Filtered:=true; // запуск фильтрации
      if adoTable.RecordCount=0 then
      MessageDlg('Ничего не найдено'+#13, mtInformation,[mbOK],0)
    end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2012, 19:54
Помогаю со студенческими работами здесь

Не могу прикрутить bindingnavigator к grid, которая связана с другой grid
вот код, если бы grid не были связаны то и проблем бы не было. а тут никак не получается. нужно чтобы binding навигатор относился к...

Неправильная ширина в Css Grid (grid-template-columns)
По высоте все нормально, но ширину никак не додумаюсь как выставить как на макете в итоге получил в макете должно быть так ...

В стиле для элемента Grid использовать другой Grid
Пытаюсь создать вот такой стиль для Grid &lt;Style x:Key=&quot;CrosswalkHorizontal&quot; TargetType=&quot;Grid&quot;&gt; &lt;Setter...

Как изменить Grid.Row и Grid.Column в элементе
как переместить кнопку из одной ячейки в другую при нажатии на нее или как поменять содержимое ячеек местами также при нажатии на кнопку ...

CSS grid (display: grid) как расположить блоки?
Пожалуйста подскажите как мне с помощью display grid рассположить блоки как на скриншоте


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru