Ограничение Db Cross-tab

отредактировано 06:57 Раздел: FastReport 4.0
Добрый день!
Подскажите пожалуйста, в чем может быть моя ошибка, или дело в ограничениях компонента DB cross-tab.

Есть необходимость вывести на печать таблицу, точное содержание которой заранее неизвестно.
Создаю пустой DBcross1, задаю параметры. Запросом ZQuery1 получаю необходимые мне данные (первая колонка всегда номер лицевого счета, а далее идут столбцы, которых более ста), далее в коде пишу:

procedure TForm1.Button3Click(Sender: TObject);
var
Cross: TfrxDBCrossView;
i: Integer;

begin
i:=0;
Cross := frxReport1.Pages[1].FindObject('DBCross1') as TfrxDBCrossView;

Cross.CellFields.Clear;
Cross.CellLevels:=0;

Cross.RowFields.Clear;

Cross.RowLevels:=1;
Cross.RowFields.Add('nls');

While i < ZQuery1.FieldCount-1 do
begin
Cross.CellLevels:=Cross.CellLevels+1;
Cross.CellFields.Add(ZQuery1.Fields[i+1].FieldName);
Cross.CellHeaderMemos.Text:=ZQuery1.Fields[i+1].FieldName;
inc(i);
end;

frxReport1.ShowReport();

end;


На выходе ошибка - ... faulted with message: 'access violation at 0x........: write of address 0x.........'. Process Stopped.

Если в цикле поменять While i < ZQuery1.FieldCount-1 do на While i < 38 do, то ошибки не будет, но и в отчет попадут только первые 38 столбцов. Если поставить 39 или больше, то снова появится ошибка.

Комментарии

  • отредактировано 06:57
    Я тоже столкнулась с такой же проблемой. В моей ситуации максимальное количество, которое может отобразиться CellLevels=32, если 33 и более то выскакивает такое же сообщение access violation...
    Может, всё же кто то знает, возможно ли снять ограничение и если да, то как? Прошу откликнуться, не оставьте без ответа, пожалуйста!
    Заранее спасибо,
    Надежда
  • gpigpi
    отредактировано 06:57
    Максимальное количество ячеек в кроссе - 32
  • отредактировано 06:57
    gpi написал: »
    Максимальное количество ячеек в кроссе - 32
    А почему сделали вообще ограничение? Это баг? Если да, то будет ли исправлено в новой версии?
    Я думала, что удобство использования кросс таблиц именно когда не известно заранее количество столбцов. И у меня как раз вот такой случай от заказчика. На данный момент в их базе уже введено 51 значений кода, а в будущем даже они не знают, сколько будет. И хотят видеть эти коды именно как столбцы, им так удобнее экспортировать в эксел и работать в таком виде.
    Получается, что с таким ограничением в 32 мне нет смысла использовать крос таблицу. А как реализовать репорт в таком случае?? :)
  • gpigpi
    отредактировано 06:57
    Мне тяжело представить задачу, для реализации которой в кроссе придётся задействовать более 32 ячеек. Для печати датасета с любым количеством столбцов в кроссе достаточно одной ячейки. Пример в демке PrintTable

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

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.