Поиск в TTable

miss.mate
Дата: 27.05.2011 08:58:17
Доброе все суток, подскажите как в TTable найти все записи в которые входить слово из tedit , и переместить курсор в гриде на эти записи по очереди.

На форме лежит grid привязан к TTable так же есть edit и кнопка, необходимо по нажатию на кнопке перемещаться по гриду на те записи в которые входит слово из грида, те кнопка действиет как натйти следующий элемент удовлитворящий данным из edit ?

Методом Locate ищет только полностью одинаковые а надо что бы работал как like ?
Anatoly Podgoretsky
Дата: 27.05.2011 08:59:41
.Next пока равно условию из Locate
miss.mate
Дата: 27.05.2011 09:07:46
Anatoly Podgoretsky
.Next пока равно условию из Locate


так ведь locate ищет только если полностью совпадает, а мне надо ввести любую часть слово и что бы он нашел
Anatoly Podgoretsky
Дата: 27.05.2011 09:10:04
Не надо использовать Locate, надо просто перемещаться по таблице и сравнивать с условием. Но все это не правильно, надо просто сделать селективный запрос, через TAdoDataset или TQuery (если АДО не доступно).
miss.mate
Дата: 27.05.2011 09:17:57
Anatoly Podgoretsky
Не надо использовать Locate, надо просто перемещаться по таблице и сравнивать с условием. Но все это не правильно, надо просто сделать селективный запрос, через TAdoDataset или TQuery (если АДО не доступно).


запросом я не могу, мне нужно что бы в гриде отобразились все записи, а по кнопке просто двигаться по эти записям
Anatoly Podgoretsky
Дата: 27.05.2011 09:22:34
Это почему же не можешь, но и для этого случая ответ дан, .NEXT
miss.mate
Дата: 27.05.2011 09:28:07
Anatoly Podgoretsky
Это почему же не можешь, но и для этого случая ответ дан, .NEXT


Извините пожалуйста, я не совсем понимаю какое решение вы предлогаете.

В грид выводить данные через Query, изначально будут все записи, потом при нажатии на кнопку менять запрос на like и выводить только те которые подходят по условию?
Я правильно вас поняла?
MaratIsk
Дата: 27.05.2011 09:40:56
miss.mate,

вот так

procedure TfrmFrame.acFindExecute(Sender: TObject);
var
  s          : string;
  bm         : TBookmark;
begin
  if not MemData.Active then Exit;
  if MemData.RecordCount = 0 then exit;
  if EditFind.Text = '' then exit;
  MemData.DisableControls;
  Screen.Cursor := crHourGlass;
  bm            := MemData.GetBookmark;
  try
    MemData.Next;
    while not (MemData.Eof) do begin
      s := MemData.FindField(DBGrid.SelectedField.FieldName).AsString;
      if pos(AnsiUpperCase(EditFind.Text), AnsiUpperCase(s))>0 then
        begin
          bm := MemData.GetBookmark;
          Break;
        end;
      MemData.Next;
    end; // while not (FDataSet.Eof)
   if MemData.Eof then
      begin
        MemData.GotoBookmark(bm);
        MsgBox('Достигнут конец списка для поиска!', MB_ICONINFORMATION);
      end; // if MemData.Eof
    MemData.GotoBookmark(bm);
  except
    on E:Exception do begin
      Screen.Cursor := crDefault;
      MsgBox('Ошибка поиска значения!', MB_ICONWARNING);
    end;
  end; // try
  Screen.Cursor := crDefault;
  MemData.FreeBookmark(bm);
  MemData.EnableControls;
end;
Anatoly Podgoretsky
Дата: 27.05.2011 09:45:18
miss.mate
Anatoly Podgoretsky
Это почему же не можешь, но и для этого случая ответ дан, .NEXT


Извините пожалуйста, я не совсем понимаю какое решение вы предлогаете.

В грид выводить данные через Query, изначально будут все записи, потом при нажатии на кнопку менять запрос на like и выводить только те которые подходят по условию?
Я правильно вас поняла?

Проход по набору данных от начала до конца, если нет сортировки по данному полю, и сравнение оно или нет, если оно то останов до запуска поиска следующего значения, если нет то двигаемся дальше до конца.
Напиши свой поиск, а не этот говнокод, простой, быстрый и удобный, там же меньше 10 строк кода
MaratIsk
Дата: 27.05.2011 09:52:05
Anatoly Podgoretsky
miss.mate
пропущено...


Извините пожалуйста, я не совсем понимаю какое решение вы предлогаете.

В грид выводить данные через Query, изначально будут все записи, потом при нажатии на кнопку менять запрос на like и выводить только те которые подходят по условию?
Я правильно вас поняла?

Проход по набору данных от начала до конца, если нет сортировки по данному полю, и сравнение оно или нет, если оно то останов до запуска поиска следующего значения, если нет то двигаемся дальше до конца.
Напиши свой поиск, а не этот говнокод, простой, быстрый и удобный, там же меньше 10 строк кода


покажи-ка свои 10 строчек