Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2009, 15:13   #1
dalien
Пользователь
 
Регистрация: 18.06.2009
Сообщений: 17
По умолчанию поиск DBGrid+ComboBox+Edit

Добрый день.
Помогите разобраться с поиском в 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

Буду благодарен.Спасибо
dalien вне форума Ответить с цитированием
Старый 20.06.2009, 15:27   #2
dalien
Пользователь
 
Регистрация: 18.06.2009
Сообщений: 17
По умолчанию

Чтобы искался по выбранному столбцу, я разобрался.Сделал вот так:
Код:
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]);
КАК организоваь поиск строки,если в столбце она встретилась нескролько раз
dalien вне форума Ответить с цитированием
Старый 25.06.2009, 22:56   #3
kinderproc
Пользователь
 
Регистрация: 10.06.2009
Сообщений: 13
По умолчанию

Можно и без Locate обойтись. Вот код, каждый раз когда нажимается кнопка - ищется запись из Edit-а, начиная со следующей строки:

Код:
var
  Form1: TForm1;
  { В этой закладке хранится ссылка на строку
    с предыдущим найденным числом }
  BookMark: TBookmark;

implementation

uses StrUtils;

{$R *.dfm}
{ Фунция поска строки в столбце Dataset-a
  ACol - столбец, в котором ищется значение
  AStr - строка для поиска }
function FindStr(AGrid: TDataSet; ACol: Integer; AStr: String): Boolean;
var
  OldPos: Integer;
begin
  Result := False;
  { Запоминаем номер строки для выхода из цикла }
  OldPos := AGrid.RecNo;

  { Если закладка пустая - ставим закладку на
    первую запись}
  if BookMark <> nil then
  begin
    AGrid.GotoBookmark(BookMark);
    AGrid.Next;
  end else begin
    AGrid.First;
    BookMark := AGrid.GetBookmark;
  end;

  repeat
    { Если достигли конца DataSet - ищем с первой записи }
    if AGrid.Eof then
      AGrid.First;

    { Если строка найдена - выставляем на нее закладку
      и выходим }
    if Pos(AStr, AGrid.Fields[ACol].AsString) <> 0 then
    begin
      BookMark := AGrid.GetBookmark;
      Result := True;
      Exit;
    end;

    { Если прошли все записи - выходим }
    if OldPos = AGrid.RecNo then exit;
    { Иначе переходим на следующую запись }
    AGrid.Next;
  until not True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.DisableControls;
  FindStr(DBGrid1.DataSource.DataSet, 0, Edit1.Text);
  DBGrid1.DataSource.DataSet.EnableControls;
  DBGrid1.SetFocus;
end;

end.
kinderproc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Edit и DBGRID LIEN Общие вопросы Delphi 11 27.05.2009 10:45
При onselect на combobox вып-ие Query1 и Query2, и заполнение Edit Абдуллаев Рустам БД в Delphi 3 08.05.2009 14:59
can't edit, may select (combobox) TaTT DoGG Общие вопросы .NET 2 04.01.2009 16:17
из DBGrid в Edit nevo БД в Delphi 4 24.04.2008 16:03
ComboBox в DBGrid AlexandrSid Общие вопросы Delphi 4 16.04.2008 15:41