img
00:00
imgDRKB online - Создание кросс-таблицы
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  VCL
  Системные функции и WinAPI
  Базы данных
  Общие вопросы
  Теория баз данных, архитектура и проектирование
  Базы данных с нуля (статья)
  Проблемы при работе с Blob полями
  Работа через BDE
  Установка BDE
  Настройка BDE, Database Desktop
  Справочные материалы по BDE
  Работа с Alias
  Поддержка пользователей, защита
  Непосредственное обращение к BDE
  Работа с базами данных
  Работа с TTable, TQuery и TDatabase
  Объяснения некоторых ошибок при работе с базами данных
  Работа с таблицами
  Очень медленный доступ к таблице при первом обращении
  Как создать таблицу в памяти?
  Создание кросс-таблицы
  Физическое удаление записей в локальных таблицах (BDE)
  Копирование таблицы с помощью DBE
  Создание таблицы
  Получение информации о таблице
  Как сохранить содержимое таблицы в текстовый файл?
  Кросс-таблица через pivot-таблицу
  Создание таблицы по образу и подобию
  Local SQL и временная таблица
  Как копировать и удалять таблицы?
  Как сравнить bookmarks в таблице?
  Как узнать версию таблицы
  Работа с BDE в сети, общий доступ к данным
  Работа с полями
  Работа с индексами
  Работа с запросами SQL в BDE
  Разные вопросы
  Работа через ADO
  Работа через ODBC
  Работа с DBExpress
  Частные вопросы по конкретным базам данных
  Работа с визуальными компонентами (DB Controls)
  Работа с SQL
  XML
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=1989] Комментариев: 0 
Создание кросс-таблицы


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

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

Текст в QBE1.QBE :

delphi
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|





delphi
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;






@Drkb::02594

Взято с http://delphiworld.narod.ru
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
02-08-2019 21:22
Set
Не знал что настолько редко
02-08-2019 21:22
Set
Нифига се
01-08-2019 14:26
antonn
smiley
01-08-2019 14:17
pitch
Ну вот и яяяяя
29-07-2019 10:04
antonn
Очень редкое природное явление smiley
28-07-2019 21:21
John Warner
Да, бывает.
27-07-2019 17:41
Set
Тут кто-то пишет?
21-07-2019 02:59
Adler
up smiley
18-07-2019 11:26
kuzyara
drkb online должен жить!
долгих лет автору сайта!
03-07-2019 16:00
Programmer
Привет
Статистика
 СегодняВсего
Посетителей1732088500
Запросов8968321595113
Online
Пользователей0
Гостей68
imgimgimgimg
 
img
     00:00