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

Пример DbiAddFilter

Delphi , Базы данных , Сортировка и Фильтр

Пример DbiAddFilter

Автор: Mark Erbaugh


type
  TmyFilter = record
    Expr: CANExpr;
    Nodes: array[0..2] of CANNode;
    literals: array[0..7] of char;
  end;

const
  myFilter: TMyFilter = (Expr:
    (iVer: 1; iTotalSize: sizeof(TMyFilter); iNodes: 3;
    iNodeStart: sizeof(CANExpr); iLiteralStart: sizeof(CANExpr) +
    3 * sizeof(CANNode));
    Nodes:
    ((canBinary: (nodeClass: nodeBinary; canOP: canEQ;
    iOperand1: sizeof(CANNode); iOperand2: 2 * sizeof(CANNode))),
    (canField: (nodeClass: nodeField; canOP: canField2;
    iFieldNum: 0; iNameOffset: 0)),
    (canConst: (nodeClass: nodeConst; canOP: canCONST2;
    iType: fldZSTRING; iSize: 3; iOffset: 5)));
    literals:
    ('T', 'Y', 'P', 'E', #0, 'I', 'N', #0));

var
  dbResult: DBIResult;
  hFilter, hFilter1: hDBIFilter;
begin (* procedure SetupFilter *)
  dbResult := DbiAddFilter(tblAP_.Handle, 1, 1,
    False, addr(myFilter), nil, hFilter);
  dbResult := DbiActivateFilter(tblAP_.Handle, hFilter);
  tblAP_.First;
  myFilter.nodes[0].canBinary.canOp := canNE;
  dbResult := DbiAddFilter(tblAP1_.Handle, 1, 1,
    False, addr(myFilter), nil, hFilter1);
  dbResult := DbiActivateFilter(tblAP1_.Handle, hFilter1);
  tblAP1_.First;
  myFilter.nodes[0].canBinary.canOp := canEQ;
end;

Этот пример устанавливает два фильтра. Первый (применяемый к tblAP_) выводит все записи, где ТИП поля имеет значение 'IN'. Второй (применяемый к tblAP1_) выводит все записи, где ТИП поля не имеет значения 'IN'.

Также необходимо включить в ваш файл файлы DBITYPES и DBIPROCS, где определены вызываемые функции и константы.

Пример использования функции DbiAddFilter для добавления фильтров в таблицу базы данных в Delphi.

Фильтр определяется как тип записи TmyFilter, содержащий:

  • Expr: объект CANExpr (Condition And Node Expression), который specifies the condition for the filter.
  • Nodes: массив из до 3 объектов CANNode, каждый из которых представляет узел в дереве выражения.
  • Literals: массив из до 8 символов, используемых как литералы в выражении.

Пример defines a single filter myFilter and adds it to two tables: tblAP_ и tblAP1_. The first filter is activated with DbiActivateFilter, which applies the filter to the table. Then, the program sets the value of the first node's binary operation (canBinary.canOp) to canNE (not equal) for the first table and to canEQ (equal) for the second table.

Эффект заключается в том, что первый фильтр вернет все записи в tblAP_, где поле типа имеет значение 'IN', а второй фильтр вернет все записи в tblAP1_, где поле типа не имеет значения 'IN'.

Для использования этого примера вам нужно включить файлы DBITYPES и DBIPROCS, которые определяют типы и процедуры, используемые интерфейсом базы данных.

Вот альтернативное решение с использованием более современной версии Delphi (например, XE8 или позднее):

uses
  Data.DBClient,
  Data.SqlExpr;

var
  dbResult: TSqlResult;
  filter: TCustomFilter;
begin
   // Создаем новый фильтр
  filter := TLikeFilter.Create(nil);
  filter.Expr := 'TYPE = ''IN''';
  filter.Active := True;

   // Добавляем фильтр в таблицу
  dbResult := tblAP_.AddFilter(filter, False);

   // Активируем фильтр
  tblAP_.ActivateFilters;
end;

В этом примере мы создаем объект TLikeFilter и устанавливаем его выражение на 'TYPE = ''IN'''. Затем мы добавляем фильтр в таблицу с помощью AddFilter, а затем активируем его с помощью ActivateFilters.

Пример DbiAddFilter - это демонстрация установки двух фильтров для работы с базой данных, которые позволяют отфильтровать записи по определенным критериям.


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

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




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


:: Главная :: Сортировка и Фильтр ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:56:25/0.0036427974700928/0