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

Вы можете создать их в 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;


Взято с http://delphiworld.narod.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...