Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 788

•  TDictionary Custom Sort  5 902

•  Fast Watermark Sources  5 703

•  3D Designer  8 478

•  Sik Screen Capture  6 036

•  Patch Maker  6 480

•  Айболит (remote control)  6 473

•  ListBox Drag & Drop  5 338

•  Доска для игры Реверси  94 947

•  Графические эффекты  6 677

•  Рисование по маске  5 801

•  Перетаскивание изображений  4 861

•  Canvas Drawing  5 235

•  Рисование Луны  4 958

•  Поворот изображения  4 505

•  Рисование стержней  3 186

•  Paint on Shape  2 433

•  Генератор кроссвордов  3 307

•  Головоломка Paletto  2 619

•  Теорема Монжа об окружностях  3 403

•  Пазл Numbrix  2 249

•  Заборы и коммивояжеры  2 909

•  Игра HIP  1 879

•  Игра Go (Го)  1 795

•  Симулятор лифта  2 131

•  Программа укладки плитки  1 860

•  Генератор лабиринта  2 296

•  Проверка числового ввода  1 984

•  HEX View  2 294

•  Физический маятник  1 958

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Создание кросс-таблицы



Автор: Michael Lant

Вы можете создать их в DBD как QBE-шки. Пользуясь компонентом TQBE для загрузки одной из библиотек, вы можете непосредственно использовать QBE-шки в вашем Delphi-приложении.

В следующем примере предполагается, что каждый служащий каждый день сообщает оператору о своем месторасположении. Код определяет начало трудовой недели с понедельника плюс еще четыре рабочих дня с показом соответствующей даты. Строки с 1 по 5 в QBE1.QBE (нулевая описательная) в нижеприведенной процедуре заменяются кодом. Результат всего этого в том, что строка (если имеется) для каждого человека отображается в колонке установленного результата и значение 'X' включается если только запись существует. Для создания агрегатной таблицы можно было бы подсчитывать результаты.

Текст в QBE1.QBE :

CALLIN.DB | StaffNo   | Date    |
          | _join1    | 3/10/95 |
          | _join2    | 3/11/95 |
          | _join3    | 3/12/95 |
          | _join4    | 3/13/95 |
          | _join5    | 3/14/95 |
 
XTAB.DB   | StaffNo   |Mon       |Tue       |Wed       |Thu       |Fri       |
          | _join1    |changeto X|          |          |          |          |
          | _join2    |          |changeto X|          |          |          |
          | _join3    |          |          |changeto X|          |          |
          | _join4    |          |          |          |changeto X|          |
          | _join5    |          |          |          |          |changeto X|


procedure TCallInReport.ButtonSelectClick(Sender: TObject);
begin
  TableXTab.active := false;
  if EditWeekOf.Text = '' then
  begin
    messageBeep(0);
    messageDlg('Для выбора записи необходима дата.', mtInformation, [mbOK], 0);
    exit;
  end;

  Screen.Cursor := crHourGlass;

  dtWeekOf := StrToDate(EditWeekOf.Text);
  dtStartDate := dtWeekOf - DayOfWeek(dtWeekOf) + 2;

  TableXTab.active := false;
  TableXTab.EmptyTable;
  TableXTab.active := true;

  {
  Замените строки 1 - 5 в QBE1.QBE реальными датами
  }
  QBE1.QBE.Strings[1] := '  | _join1  | ' + DateToStr(dtStartDate) + ' | ';
  QBE1.QBE.Strings[2] := '  | _join2  | ' + DateToStr(dtStartDate + 1) + ' | ';
  QBE1.QBE.Strings[3] := '  | _join3  | ' + DateToStr(dtStartDate + 2) + ' | ';
  QBE1.QBE.Strings[4] := '  | _join4  | ' + DateToStr(dtStartDate + 3) + ' | ';
  QBE1.QBE.Strings[5] := '  | _join5  | ' + DateToStr(dtStartDate + 4) + ' | ';

  try
    QBE1.active := true;
  except
    on E: EDataBaseError do
    begin
      if E.Message = 'Ошибка создания дескриптора курсора' then
        { Ничего не делайте. Делая TQBE активной, мы пытаемся создать курсор.
          Это вызывает исключительную ситуацию, которую мы должны перехватить.
          Пока я не нашел способа как отделаться от исключения. }
      else
      begin
        Screen.Cursor := crDefault;
        raise;
      end;
    end;
  else
    Screen.Cursor := crDefault;
    raise;
  end;
  TableXTab.refresh;
  Screen.Cursor := crDefault;
  TableXTab.active := true;
end;





Похожие по теме исходники

Создание таблиц в Paradox

Кроссворд

Генератор кроссвордов




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте