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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2016, 17:09   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Поиск по столбцу в таблице БД

Есть таблица. Необходимо организовать поиск записи по столбцу "Surname", причем если если фамилии повторяются, то при каждом последующем клике - продолжать поиск дальше.

Вариант с SQL-запросом не подходит, т.к. все записи должны быть видны, просто должен передвигаться курсор к найденной записи.

Как это лучше реализовать? Пробую способом ниже, находит только первое вхождение, а есть еще несколько записей с той же фамилией.

Код:
     if DataModule.FDQuery1.Locate('Surname', Edit1.Text, [loCaseInsensitive,
     loPartialKey]) then
     begin
       break;
     end;
Dux вне форума Ответить с цитированием
Старый 24.05.2016, 17:27   #2
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

поля отсортированный по данному столбцу??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 24.05.2016, 17:29   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
поля отсортированный по данному столбцу??
А причем тут сортировка?
Dux вне форума Ответить с цитированием
Старый 24.05.2016, 17:32   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

ну вы хотите поиск на кнопку повесить и тыкать ее если значений несколько кнопка должна опускать в низ указатель так?? если они отсортированны можно это сделать NEXT
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 24.05.2016, 17:38   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
ну вы хотите поиск на кнопку повесить и тыкать ее если значений несколько кнопка должна опускать в низ указатель так?? если они отсортированны можно это сделать NEXT
если не затруднить сбросьте примерчик кода такого поиска?
Dux вне форума Ответить с цитированием
Старый 24.05.2016, 17:39   #6
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
flag:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
if flag then
  begin
  if ADOTable1.Locate('name', Edit1.Text, [loCaseInsensitive,
     loPartialKey]) then
       flag:=false;
  end
   else
    Begin
     s:= ADOTable1name.Value;
     ADOTable1.Next;
     if s <> ADOTable1name.Value then ADOTable1.Prior;
    end;
end;
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 24.05.2016, 17:48   #7
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Спасибо. Не совсем понятно что значит ADOTable1name.Value;
Dux вне форума Ответить с цитированием
Старый 24.05.2016, 17:53   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

один из способов обратиться к полю.
синоним
Код:
ADOTable1.FieldByName('name').Value;
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 24.05.2016, 17:59   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если не сортировано следующую искать перебором в цикле начиная со следующей за текущей и пока не найдется или eof. И методы компонента посмотреть, может там есть что-нибудь в духе FindNext или наподобие
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.05.2016 в 18:03.
Аватар вне форума Ответить с цитированием
Старый 24.05.2016, 18:00   #10
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Код:
if flag then
  begin
  if DataModule.FDQuery1.Locate('Full_name', Edit1.Text, [loCaseInsensitive,
     loPartialKey]) then
       flag:=false;
  end
   else
    begin
     s:= DataModule.FDQuery1.FieldByName('Full_name').Value;
     DataModule.FDQuery1.Next;
     if s <> DataModule.FDQuery1.FieldByName('Full_name').Value then DataModule.FDQuery1.Prior;
    end;
Сделал как Вы написали. Находит только первое вхождение. Если нажать еще раз - ничего не происходит.
Dux вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск значений по столбцу Lamo Microsoft Office Excel 3 30.07.2013 09:47
поиск по столбцу waw БД в Delphi 5 10.06.2010 07:43
Поиск значения по столбцу panuta Microsoft Office Excel 5 15.05.2010 08:03
Поиск в поле со списком по второму столбцу Swatch Microsoft Office Access 2 16.03.2010 10:09
Поиск по первому столбцу в Delphi Xeon332 Помощь студентам 2 09.11.2008 05:12