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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2012, 12:38   #1
Cyclops
Новичок
Джуниор
 
Регистрация: 20.06.2011
Сообщений: 1
По умолчанию Поиск по всей таблице непрерывный

Помогите создать цикл для непрерывного поиска по таблице БД.
Есть прога подключенная к БД FB 2.1 использую компонент IBTable через DataSource показываю данные в DBGrid пользователю.
Пользователю надо осуществлять поиск по всем столбцам и строкам которые он видит в Гриде для этого есть Едит и кнопка.
процедуру написал все ищет но не останавливается на найденном и не ищет дальше постоянно с начала помогите дописать.

Цитата:
procedure TFormFirst.BitBtnFindClick(Sender: TObject);
var
s : string;
bm : TBookmark;
i : Integer;
begin
if not dm1.DataSource1.DataSet.Active then Exit;
if dm1.DataSource1.DataSet.RecordCount = 0 then exit;
if LEFind.Text = '' then Exit;
dm1.DataSource1.DataSet.DisableCont rols;
Screen.Cursor := crHourGlass;
bm1 := dm1.IBTable1.GetBookmark;
bm := dm1.IBTable1.GetBookmark;
try
dm1.IBTable1.Next;
for I := 0 to dm1.IBTable1.FieldCount - 1 do
begin
if DM1.IBTable1.Fields[i].DataType= ftWideString then
begin
while not dm1.IBTable1.Eof do
begin
s := Dm1.IBTable1.FindField(DBGrid1.Sele ctedField.FieldName).AsString;
if pos(AnsiUpperCase(LEFind.Text), AnsiUpperCase(s))>0 then
begin
bm := Dm1.IBTable1.GetBookmark;
Break;
end;
Dm1.IBTable1.Next;
end; // while not (MemData.Eof)
if Dm1.IBTable1.Eof then
begin
Dm1.IBTable1.GotoBookmark(bm);
Application.MessageBox('Достигнут конец списка для поиска!', PChar(Application.Title), MB_ICONINFORMATION);
BitBtnFind.Caption:='Найти';
end // if MemData.Eof
else begin
BitBtnFind.Caption:='Далее';
end;
Dm1.IBTable1.GotoBookmark(bm1);
Screen.Cursor := crDefault;
end; //if DM1.IBTable1.Fields[i].DataType= ftWideString then
end; //for I := 0 to dm1.IBTable1.FieldCount - 1 do
except
on E:Exception do begin
s := 'Ошибка поиска записи' + #13#10 + E.Message;
DM1.SaveToLog(s);
Application.MessageBox(PChar(s), PChar(Application.Title), MB_ICONINFORMATION);
end;
end; // try

Screen.Cursor := crDefault;
dm1.DataSource1.DataSet.EnableContr ols;
LEFind1.Text:='';
end;
Cyclops вне форума Ответить с цитированием
Старый 13.08.2012, 13:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
процедуру написал все ищет
я не был бы так в этом уверен.

Код:
for I := 0 to dm1.IBTable1.FieldCount - 1 do begin
  if DM1.IBTable1.Fields[i].DataType= ftWideString then begin
  while not dm1.IBTable1.Eof do begin
     s := Dm1.IBTable1.FindField(DBGrid1.SelectedField.FieldName).AsString;
Цитата:
но не останавливается на найденном и не ищет дальше постоянно с начала
Конечно же будет искать каждый раз сначала, если мы не не фиксируем найденное место, а восстанавливаем место старта.

Код:
if Dm1.IBTable1.Eof then
begin
  Dm1.IBTable1.GotoBookmark(bm);
  Application.MessageBox('Достигнут конец списка для поиска!',  PChar(Application.Title), MB_ICONINFORMATION);
  BitBtnFind.Caption:='Найти';
end // if MemData.Eof
else begin
  BitBtnFind.Caption:='Далее';
end;
Dm1.IBTable1.GotoBookmark(bm1);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.08.2012 в 13:29.
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Word - Поиск и выделение всей строки с найденным словом Kost Troll Microsoft Office Word 6 30.10.2016 17:44
Delphi БД поиск по всей таблицы tanek Помощь студентам 1 21.03.2012 04:50
Непрерывный звук в системнике Utkin Компьютерное железо 9 17.12.2009 06:49
поиск в таблице puma Помощь студентам 3 22.04.2008 23:56
Как осуществить поиск сначала по всей БД, а затем из найденных таблиц найти по полю Date нужные записи? kayman БД в Delphi 1 21.09.2007 15:56