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

Добавление Процентных Значений в DBGrid для Приложений на Delphi

Delphi , Базы данных , Access

В данной статье мы рассмотрим, как добавить колонку с процентными значениями в компонент DBGrid для приложений, написанных на языке программирования Delphi. Это может быть полезно, например, для отображения процентного соотношения количества товаров в каждой строке к общему количеству товаров во всех записях. Мы рассмотрим пример, когда необходимо добавить колонку с процентами к уже существующей колонке "Количество", но при этом не модифицировать основную таблицу TADOTable, используемую в других частях кода.

Проблема

Пользователь поддерживает приложение на Delphi и хочет добавить колонку с процентами к DBGrid, который уже отображает колонку "Количество". Проценты рассчитываются как отношение количества в строке к общему количеству всех строк, умноженное на 100. Однако, изменение основной таблицы TADOTable невозможно, так как она используется в других частях кода. Попытка добавить вычисляемое поле в TADOTable не увенчалась успехом, так как вычисление не может быть основано на агрегированных значениях, таких как сумма количества.

Решение

Несмотря на ограничения, пользователю удалось добавить пустую колонку в DBGrid, но оставалась проблема с заполнением значений процентов для каждой строки.

Подход

Чтобы решить эту задачу, необходимо добавить вычисляемое поле в TAdoDataSet и инициализировать его в событии OnCalcFields. Важно не вычислять общее количество в этом событии, так как это может привести к рекурсивному вызову OnCalcFields. Вместо этого, общее количество следует вычислять при открытии таблицы и всякий раз, когда значение может измениться, например, при редактировании, вставке или удалении строки. Результат сохраняется в поле формы или модуля данных.

Варианты вычисления общего количества

  1. Использование TAdoQuery для выполнения SQL-запроса, например, "SELECT SUM(Quantity) FROM MyTable".
  2. Использование второго экземпляра TAdoDataSet, открытого на той же таблице. Предпочтительно, чтобы этот экземпляр не имел связанных с ним графических элементов управления, чтобы можно было быстро пройти по нему без необходимости использования DisableControls и EnableControls.

Добавление поля процентов

Для добавления поля процентов в AdoDataSet, необходимо двойным кликом открыть редактор полей, правым кликом в нем выбрать "New field" и установить тип поля как "Calculated".

Код

Процедура для вычисления общего количества может выглядеть следующим образом:

procedure TForm1.GetTotalQuantity;
begin
  //  AdoQuery1 содержит SQL для получения суммы полей AdoDataSet
  if AdoQuery1.Active then
    AdoQuery1.Close;
  AdoQuery1.Open;
  try
    TotalQuantity := AdoQuery1.Fields[0].AsFloat;  //  TotalQuantity - это поле формы (или модуля данных)
  finally
    AdoQuery1.Close;
  end;
end;

Или, если используется второй экземпляр TAdoDataSet:

procedure TForm1.GetTotalQuantity;
begin
  //  AdoDataSet2 - это второй экземпляр TAdoDataSet, настроенный на ту же базу данных
  //  что и DBGrid
  if AdoDataSet2.Active then
    AdoDataSet2.Close;
  AdoDataSet2.Open;
  try
    TotalQuantity := 0;
    while not AdoDataSet2.Eof do begin
      TotalQuantity := TotalQuantity + AdoDataSet2Quantity.AsFloat;
      AdoDataSet2.Next;
    end;
  finally
    AdoDataSet2.Close;
  end;
end;

Событие OnCalcFields:

procedure TForm1.AdoDataSet1CalcFields(DataSet: TDataSet);
begin
  if TotalQuantity > 0 then
    AdoDataSet1Percentage.AsFloat := AdoDataSet1Quantity.AsFloat / TotalQuantity * 100;
end;

После добавления вычисляемого поля процентов в AdoDataSet и настройки события OnCalcFields для DataSet, DBGrid сможет отобразить это поле, как и любое другое поле DataSet.

Заключение

Добавление вычисляемой колонки процентов в DBGrid для приложений на Delphi - задача вполне выполнимая, но требует внимательного подхода к вычислениям и управлению событиями данных. Использование вычисляемых полей и правильная настройка событий позволяет достичь желаемого результата без изменений в основной таблице данных.

Создано по материалам из источника по ссылке.

В статье рассматривается, как добавить в компонент `DBGrid` на Delphi колонку с процентными значениями, не изменяя основную таблицу данных.


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

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




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


:: Главная :: Access ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:50:58/0.0039529800415039/0