Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Поиск в непроиндексированном поле таблицы

Delphi , Базы данных , Поиск

Поиск в непроиндексированном поле таблицы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{The following function can be added to your to your unit and called as follows:}

 Locate(Table1, Table1LName, 'Beman');

 {Table1 is your table component, Table1LName is TField you've add with the fields 
editor (double click on the table component) and 'Beman' is the name you want to find.}

 {Locate will find SValue in a non-indexed table}

 function Locate(const oTable: TTable; const oField: TField;
   const sValue: string): Boolean;
 var

   bmPos: TBookMark;
   bFound: Boolean;
 begin
   Locate := False;
   bFound := False;
   if not oTable.Active then Exit;
   if oTable.FieldDefs.IndexOf(oField.FieldName) < 0 then Exit;
   bmPos := oTable.GetBookMark;
   with oTable do
   begin
     DisableControls;
     First;
     while not EOF do
       if oField.AsString = sValue then
       begin
         Locate := True;
         bFound := True;
         Break;
       end
     else
       Next;
   end;
   if (not bFound) then
     oTable.GotoBookMark(bmPos);
   oTable.FreeBookMark(bmPos);
   oTable.EnableControls;
 end;

Привет! Я переведу текст на русский язык:

Код-сниппет на Delphi, реализующий функцию Locate, которая ищет конкретное значение в неиндексированной таблице поля.

Подпись функции Функция принимает три параметра:

function Locate(const oTable: TTable; const oField: TField; const sValue: string): Boolean;
  • oTable: компонент таблицы, в которой нужно поискать.
  • oField: поле в таблице, в котором нужно найти значение.
  • sValue: искомое значение.

Возвращаемое значение Функция возвращает булево значение, указывающее, было ли найдено значение или нет.

Имплементация Код состоит из нескольких шагов:

  1. Инициализируем переменные:
var
  bmPos: TBookMark;
  bFound: Boolean;
  • bmPos: маркер для хранения текущей позиции в таблице.
  • bFound: булев флаг, указывающий, было ли найдено значение.

  • Проверяем, активна ли таблица и существует ли поле:

if not oTable.Active then Exit;
if oTable.FieldDefs.IndexOf(oField.FieldName) < 0 then Exit;

Если таблица не активна или поле не существует, выходим из функции.

  1. Получаем маркер для хранения текущей позиции в таблице:
bmPos := oTable.GetBookMark;
  1. Отключаем контролы и перемещаемся к первому записи:
with oTable do
begin
  DisableControls;
  First;
end;
  1. Перебираем записи, пока не найдем значение или не дойдем до конца таблицы:
while not EOF do
  if oField.AsString = sValue then
  begin
    Locate := True;
    bFound := True;
    Break;
  end
else
  Next;

Если значение поля совпадает с искомым значением, устанавливаем Locate в True и выходим из цикла.

  1. Если значение не было найдено, восстанавливаем маркер и включаем контролы:
if (not bFound) then
  oTable.GotoBookMark(bmPos);
oTable.FreeBookMark(bmPos);
oTable.EnableControls;

Альтернативное решение Если вы ищете конкретное значение в неиндексированной таблице, может быть более эффективно использовать метод DB компонента базы данных Locate вместо реализации собственной функции. Это позволит вам воспользоваться механизмами индексации и кэширования, реализованными в underlying базе данных.

Например:

oTableLocate(oTable, oField.FieldName, sValue);

Это будет искать значение в указанном поле с помощью функциональности поиска, реализованной в компоненте базы данных.

Функция Locate позволяет найти строку в непроиндексированной таблице, сравнивая значения поля с заданным значением.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Поиск ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-30 19:51:38/0.025039911270142/1