Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск DBGrid+ComboBox+edit, организация поиска по DBGrid 
:(
    Опции темы
dalien
Дата 20.6.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Добрый день.
Помогите разобраться с поиском в DBGrid
Есть DBGrid, который заполняется из ADOQuery
На другой форме ComboBox, в который занесен список столбцов DBGrid и Edit. 
Из Combobox выбирается столбец по которому надо найти строку из Edit.
У DBGrid DataSourse=DSQC,Dataset которого есть ADOQuery.
По нажатию на кнопку найти курсор должен переходить на найденную строку

//обработка на нажатие кнопки поиск
Код

procedure TForm6.BitBtn1Click(Sender: TObject);
begin
FindNext(form1.StringGrid2,Edit1.Text);
end

//поиск по DBGrid 
Код

procedure TForm6.FindNext(var g:TstringGrid; s:string);
str:string;
begin
   case  combobox1.ItemIndex of //выбранный столбец DBGrid
    0: C:=1;
    1: C:=5;
    2: C:=6;
    3: C:=9;
    4: C:=10;
    5: C:=4;
  end;
  form1.DBGrid1.DataSource.DataSet.First;
  form1.DBGrid1.DataSource.DataSet.Locate('Сотрудник',s,[loPartialKey]);
 

после этого он находит мне в столбце сотрудник перую найденную запись и на этом останавливается.Как сделать,чтобы он находил остальные в этом столбце
и как передать в Locate() номер столбца из Combobox 

Буду благодарен.Спасибо
PM MAIL   Вверх
dalien
Дата 20.6.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Чтобы искался по выбранному столбцу, я разобрался.Сделал вот так:
Код

procedure TForm6.FindNext(var g:TstringGrid; s:string);
var LRow,LCol,R,C:integer;
str:string;
begin
   case  combobox1.ItemIndex of
    0: C:=1;
    1: C:=5;
    2: C:=6;
    3: C:=9;
    4: C:=10;
    5: C:=4;
  end;
  form1.DBGrid1.SelectedIndex:=C;
  str:=form1.DBGrid1.DataSource.DataSet.Fields[C].FieldName;
  form1.DBGrid1.DataSource.DataSet.Locate(str,s,[loPartialKey]);

КАК организоваь поиск строки,если в столбце она встретилась нескролько раз
PM MAIL   Вверх
Данкинг
Дата 20.6.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(dalien @  20.6.2009,  15:24 Найти цитируемый пост)
Как сделать,чтобы он находил остальные в этом столбце

И что потом сделать с найденными записями? Если Грид заполняется из ADOQuery, то почему нельзя выводить данные, согласно нужному условию (select .... where....) ?
Если же с этими данными (по условию) нужно просто что-то ещё сделать, тогда проще пройти циклом по датасету, проверяя данные нужного столбца данной строки на соответствие условию. Правда, скорость тут будет уже не такая, как в первом моём варианте.

Цитата(dalien @  20.6.2009,  15:24 Найти цитируемый пост)
и как передать в Locate() номер столбца из Combobox 

Не понял. Ну вот, combobox1.ItemIndex у тебя же есть.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
dalien
Дата 20.6.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



DBGrid загружается 1 раз, а потом по поиску я должен перейти на найденную строку.Мне надо чтобы остальные строки тоже были в Гриде. Попробую сейчас цикл сделать

Добавлено через 4 минуты и 39 секунд
так?

Код

while(not  form1.DBGrid1.DataSource.DataSet.EOF) do
begin
  if form1.DBGrid.DataSet.Locate(str,s,[loPartialKey]) the true
end


Добавлено через 7 минут и 29 секунд
если я в цикле буду делать,то он по одному нажатию кнопки за раз проходит весь столбец,и если несколько значений, то он остановится на последнем.
А мне надо-один раз нашел-переместился,другой раз нажал кнопку- переместился и.т.д

Добавлено через 12 минут и 19 секунд
так написал ничего н нашёл+ прога повисла.Помогите плиз
PM MAIL   Вверх
Данкинг
Дата 20.6.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(dalien @  20.6.2009,  15:46 Найти цитируемый пост)
Мне надо чтобы остальные строки тоже были в Гриде.

Тогда запросом. Ну или фильтр ставь.

Цитата(dalien @  20.6.2009,  15:46 Найти цитируемый пост)
если я в цикле буду делать,то он по одному нажатию кнопки за раз проходит весь столбец,и если несколько значений, то он остановится на последнем.

Ну теперь понятно, в твоём случае цикл не поможет.

Цитата(dalien @  20.6.2009,  15:46 Найти цитируемый пост)
Код

 if form1.DBGrid.DataSet.Locate(str,s,[loPartialKey]) the true

Что true? smile  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
dalien
Дата 20.6.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Код

form1.DBGrid1.DataSource.DataSet.First;
  while not (form1.DBGrid1.DataSource.DataSet.Eof) do
     form1.DBGrid1.DataSource.DataSet.Locate(str,s,[loPartialKey]);


 так тоже не работает

Это сообщение отредактировал(а) THandle - 20.6.2009, 16:08
PM MAIL   Вверх
Данкинг
Дата 20.6.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(dalien @  20.6.2009,  16:05 Найти цитируемый пост)
так тоже не работает 

Было бы странно, если бы работало. smile В общем, мой тебе совет - используй запрос.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
dalien
Дата 20.6.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



ставлю после locate break или exit он останавливается на первой найденной записи.Дальше не ищет 
PM MAIL   Вверх
Данкинг
Дата 20.6.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(dalien @ 20.6.2009,  16:11)
ставлю после locate break или exit он останавливается на первой найденной записи.Дальше не ищет

Ну, всё правильно делает.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
alf138
Дата 18.3.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Есть комбобокс
Код

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
    0: C:='FAM';
    1: C:='IMYA';
    2: C:='OTCH';
    3: C:=' ';

есть функция поиска 
Код

procedure TForm1.Button6Click(Sender: TObject);
var LRow,LCol,R,C:integer;
str:string;
begin
Form1.DBGrid1.DataSource.DataSet.Locate(ComboBox2.Text,Edit5.Text,[loPartialKey]);
end;

теперь вопрос как прописать комбобокс, что бы все работало...
PM MAIL   Вверх
Данкинг
Дата 18.3.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(alf138 @  18.3.2010,  20:58 Найти цитируемый пост)
теперь вопрос как прописать комбобокс, что бы все работало... 

Что работало?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
alf138
Дата 19.3.2010, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Что бы работала эта строчка
Код

Form1.DBGrid1.DataSource.DataSet.Locate(ComboBox2.Text,Edit5.Text,[loPartialKey]);

изначально она выглядела так 
Код

Form1.DBGrid1.DataSource.DataSet.Locate('fam',Edit5.Text,[loPartialKey]);

вместо 'fam' мне нужно подставлять значения из комбобокса...
Что нужно прописать в комбобоксе, не понимаю.
PM MAIL   Вверх
Deniz
Дата 19.3.2010, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Locate ищет только первую.
Что бы была возможность искать дальше нужно что-то типа (по предложению Данкинг)
Код

-- s - строка поиска
form1.DBGrid1.SelectedIndex:=C;
str:=form1.DBGrid1.DataSource.DataSet.Fields[C].FieldName;
while not (form1.DBGrid1.DataSource.DataSet.Eof) do begin
     form1.DBGrid1.DataSource.DataSet.Locate(str,s,[loPartialKey]);
  if pos(s, form1.DBGrid1.DataSource.DataSet.FindField(str).asstring) > 0 then exit;
  form1.DBGrid1.DataSource.DataSet.Next;
end;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
alf138
Дата 19.3.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Да не нужно мне не чего искать я все нашол мне нужно чтобы в этой строчке 
Код

Form1.DBGrid1.DataSource.DataSet.Locate('fam',Edit5.Text,[loPartialKey]);

вместо 'fam' вставлялось нужное значение из комбобокс, а что прописать в комобоксе я не знаю ....
допустим это поиск по фамилии, а мне нужно чтобы я выбрал например в комбобоксе по имени и у меня в этой строчке значение 'fam' поменялось на 'imya', и т.д.
Код

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
    0: C:='FAM';
    1: C:='IMYA';
    2: C:='OTCH';
    3: C:=' ';
procedure TForm1.Button6Click(Sender: TObject);
var LRow,LCol,R,C:integer;
str:string;
begin
Form1.DBGrid1.DataSource.DataSet.Locate(ComboBox2.Text,Edit5.Text,[loPartialKey]);
end;

пытался сделать так не получается ...

Это сообщение отредактировал(а) alf138 - 19.3.2010, 10:07
PM MAIL   Вверх
Deniz
Дата 19.3.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(alf138 @  19.3.2010,  12:05 Найти цитируемый пост)
Да не нужно мне не чего искать я все нашол мне нужно чтобы в этой строчке 
А что ты влез не в свою тему? Создай новую.
Цитата(alf138 @  19.3.2010,  12:05 Найти цитируемый пост)
пытался сделать так не получается ...
что не получается? Телепатов мало.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.