Отправляет email-рассылки с помощью сервиса Sendsay

Delphi для профессионалов

  Все выпуски  

Delphi для профессионалов - Быстрый поиск в базах данных


Информационный Канал Subscribe.Ru


Профессиональная реклама в интернет. Русскоязычный рекламный брокер.

Рассылка: Delphi для профессионалов

Количество подписчиков: 4307
Рассылка 'Delphi для профессионалов'

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям


Здравствуйте уважаемые подписчики!

Ко мне пришло одно письмо с темой "малость не врубился".
Для полной ясности приведу весь текст:
задавал вопрос об использовании отдельных функций из DLL в своих проектах, ни ответа (ну да это понятно) ни вопроса?



Я прошу прощения у всех тех, кто не получает ответов и не видит своего вопроса в рассылке.
Я понимаю каждого из них. При получении вопросов я их просматриваю и выбираю в следующий раздел "Вопрос-ответ" в рассылку таким образом:
небольшая часть свежих, которые нужно срочно решить, остальные - те, которые уже давно ждут ответа.
На данный момент у меня базе 76 вопросов, которые я еще не давал в рассылку.
Я прошу своих подписчиков отнестить снисходительнее к запросам своих "соседей".
Да и помимо того мне не хотелось бы превращать свалку вопрос-ответов.
Уж лучше тогда рассылку назвать "Вопросы и ответы....".
Я этого умышленно не делаю, поскольку, я считаю, будет теряться смысл остальной части вопросов и ответов.
Вы не пытались съесть большой торт одним залпом?
Ну первые несколько раз у Вас это выйдет, но потом - будет очень хорошо, если только стошнит.
Точно также и с вопросами, и ответами.


Желаю хорошего дня и хорошего настроения.
Ведущий рассылки.

Быстрый поиск в базах данных

unit Finder;

interface

uses DB, DBTables, SysUtils;

  function GrabMemoFieldAsPChar(TheField : TMemoField): PChar;
  function DoFindIn(TheField : TField; SFor : String): Boolean;
  function FindIt(TheTable : TDataSet; TheFields : array of integer;

  SearchBackward : Boolean;
  FromBeginning : Boolean; SFor : String): Boolean;

{применение функции FindIt - if FindIt(NotesSearchT,
 [NotesSearchT.FieldByName('Leadman').Index],False, True,
 SearchText.Text) then DoSomething; }

implementation

function GrabMemoFieldAsPChar(TheField : TMemoField): PChar;
begin
  with TBlobStream.Create(TheField, bmRead) do begin
    GetMem(Result, Size + 1);
    FillChar(Result^, Size + 1, #0);
    Read(Result^, Size);
    Free;
  end;
end;

function DoFindIn(TheField : TField; SFor : String): Boolean;
var
  PChForMemo : PChar;
begin
  Result:=False;
  case TheField.DataType of
  ftString : begin
               if (Pos(SFor, UpperCase(TheField.AsString)) > 0) then
                 Result := True;
             end;
  ftInteger: begin
               if (Pos(SFor, TheField.AsString) > 0) then Result:=True;
             end;
  ftBoolean: begin
               if SFor = UpperCase(TheField.AsString) then
               Result := True;
             end;
  ftFloat  : begin
               if (Pos(SFor, TheField.AsString) > 0) then Result := True;
             end;
  ftCurrency:begin
               if (Pos(SFor, TheField.AsString) > 0) then Result := True;
             end;
  ftDate..
  ftDateTime:begin
               if (Pos(SFor, TheField.AsString) > 0) then Result := True;
             end;
  ftMemo   : begin
               SFor[Ord(SFor[0])+1] := #0;
               PChForMemo:=GrabMemoFieldAsPChar(TMemoField(TheField));
               StrUpper(PChForMemo);
               if not (StrPos(PChForMemo,@SFor[1])=nil) then Result:=True;
               FreeMem(PChForMemo,StrLen(PChForMemo + 1));
             end;
  end;
end;

function FindIt(TheTable : TDataSet; TheFields : array of integer;
                SearchBackward : Boolean;
                FromBeginning : Boolean; SFor : String): Boolean;
var
  i, HighTheFields, LowTheFields : integer;
  BM : TBookmark;
begin
  TheTable.DisableControls;
  BM := TheTable.GetBookmark;
  try
    LowTheFields := Low(TheFields);
    HighTheFields := High(TheFields);
    SFor := UpperCase(SFor);
    Result := False;
    if FromBeginning then TheTable.First;
    if SearchBackward then begin
      TheTable.Prior;
      while not TheTable.BOF do begin
        for i := LowTheFields to HighTheFields do begin
          if DoFindIn(TheTable.Fields[TheFields[i]],SFor) then begin
            Result := True;
            Break;
          end;
        end;
        if Result then Break else TheTable.Prior;
      end;
    end else begin
      TheTable.Next;
      while not TheTable.EOF do begin
        for i:=LowTheFields to HighTheFields do begin
          if DoFindIn(TheTable.Fields[TheFields[i]],SFor) then begin
            Result:=True;
            Break;
          end;
        end;
        if Result then Break else TheTable.Next;
      end;
    end;
  finally
    TheTable.EnableControls;
    if not Result then TheTable.GotoBookmark(BM);
    TheTable.FreeBookmark(BM);
  end;
end;

end.

Все вопросы присылайте по адресу: delphi-ask@igp.org.ua
Все ответы присылайте по адресу: delphi-reply@igp.org.ua
Все подсказки присылайте по адресу: delphi-hint@igp.org.ua

Со всем списком советов можно познакомиться по адресу: http://igp.org.ua/delphine/.
Наш проект Delphine можно найти по следующей ссылке: http://igp.org.ua/products/delphine/.

Заходите в наш форум: Форум Delphi-профессионалов. Адрес: http://forum.igp.org.ua/.
Здесь Вы найдете ответы на все Ваши вопросы!

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное