Ограничение Db Cross-tab
Добрый день!
Подскажите пожалуйста, в чем может быть моя ошибка, или дело в ограничениях компонента 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 или больше, то снова появится ошибка.
Подскажите пожалуйста, в чем может быть моя ошибка, или дело в ограничениях компонента 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 или больше, то снова появится ошибка.
Комментарии
Может, всё же кто то знает, возможно ли снять ограничение и если да, то как? Прошу откликнуться, не оставьте без ответа, пожалуйста!
Заранее спасибо,
Надежда
Я думала, что удобство использования кросс таблиц именно когда не известно заранее количество столбцов. И у меня как раз вот такой случай от заказчика. На данный момент в их базе уже введено 51 значений кода, а в будущем даже они не знают, сколько будет. И хотят видеть эти коды именно как столбцы, им так удобнее экспортировать в эксел и работать в таком виде.
Получается, что с таким ограничением в 32 мне нет смысла использовать крос таблицу. А как реализовать репорт в таком случае??