Вывести массив в отчет

отредактировано 17:58 Раздел: FastReport Studio
Вопрос в следующем как правильно передать в ОТЧЕТ и затем вывести
например в виде таблицы МАССИВ
Использую:
Visual C++ 7.1
FastReport Studio 3.20

не получается вывести беру как пример UserDataSet
или пусто или Access Violation

Объясните с примерами как вывести массив табличкой,
например 4 столбца и некоторое кол-во строк.

Комментарии

  • almanalman космополит
    отредактировано 17:58
    Используйте TfrxUserDataset

    Столбцы - это поля. Чтобы задать поля в датасете, укажите их в свойстве Fields в виде строки. Поля разделяются симоволом Возврат Каретки <CR>.

    Строки таблицы - это записи. Для навигации по строкам, напишите обработчик событий OnFirst, OnNext, OnPrior и OnCheckEOF.

    Если обработчик события OnCheckEOF возвращает значение "истина", это значит что больше данных для обработки нет.

    Данные передаются в таблицу при помощи события OnGetValue.
    Это событие имеет один входной и один выходной параметры.
    Входящий параметр указывает имя поля. В выходном параметре возвращается значение для текущей записи и запрошенного поля.

    Испульзуя Visual C++ необходимо помнить, что параметры события OnGetValue передаются в виде типа данных VARIANT, что накладывает соответсвующие требования к обработке этих параметров.

    Не могли бы Вы уточнить, работает ли оригинальный пример, который поставляется вместе со студией?
  • отредактировано 17:58
    Пример отлично работает.
    написал:
    Столбцы - это поля. Чтобы задать поля в датасете, укажите их в свойстве Fields в виде строки. Поля разделяются симоволом Возврат Каретки <CR>.

    Вот с этим не понятно, зачем оно? Не почувствовал разницы. Хоть одно поле, хоть несколько
    pDataSet->Fields = "Num\nName\nVal\n";
    или
    pDataSet->Fields = "Num\n";

    А вот с этим отчет всегда пустой.
    pDataSet->Name = "Name\nName_2\nName_3\n";
    Что не так?

    Обработчики из примера поменял только вот, может и криво, но для диплома сойдет ;)
    char ** field;
    
    STDMETHODIMP raw_OnGetValue ( VARIANT ColumnName, VARIANT * Value ) 
        {
        static int i=0;
        i=atoi((_bstr_t)ColumnName );
        i--;
        _variant_t  v(field[idx*fieldCol+i]);
        HRESULT hr =  VariantCopy(Value, &v);
    
        //return S_OK; 
        return hr;
        }
    
    STDMETHODIMP raw_OnCheckEOF (VARIANT_BOOL * IsEOF ) 
        { 
    
       // *IsEOF = ! ( idx < COUNT_ELEMENTS(field) );
        *IsEOF = ! ( idx < fieldRow );
        return S_OK; 
        }
    
  • almanalman космополит
    отредактировано March 2006
    Green написал:
    Пример отлично работает.
    Green написал:
    Столбцы - это поля. Чтобы задать поля в датасете, укажите их в свойстве Fields в виде строки. Поля разделяются симоволом Возврат Каретки <CR>.

    Вот с этим не понятно, зачем оно? Не почувствовал разницы. Хоть одно поле, хоть несколько
    pDataSet->Fields = "Num\nName\nVal\n";
    или
    pDataSet->Fields = "Num\n";

    Это имена столбцов, они используются в событии OnGetValue.
    На этапе проектирования FastReport Studio рассматривались различные варинаты установки имен полей. В результате остановились на разделении имён через перевод строки.
    Green написал:
    Пример отлично работает.
    А вот с этим отчет всегда пустой.
      pDataSet->Name = "Name\nName_2\nName_3\n";
    Что не так?

    Поскольку датасет всегда привязывается к отчёту по имени, то скорее всего таким образом Вы нарушаете привязку датасета к отчету. Кроме того, я не уверен что имя датасета может содержать в себе перевод строки.

    Вы используете FastReport в дипломной работе? Приятно это слышать.
  • отредактировано 17:58
    alman написал:
    alman написал:
    Пример отлично работает.
    alman написал:
    Столбцы - это поля. Чтобы задать поля в датасете, укажите их в свойстве Fields в виде строки. Поля разделяются симоволом Возврат Каретки <CR>.

    Вот с этим не понятно, зачем оно? Не почувствовал разницы. Хоть одно поле, хоть несколько
    pDataSet->Fields = "Num\nName\nVal\n";
    или
    pDataSet->Fields = "Num\n";

    Это имена столбцов, они используются в событии OnGetValue.
    На этапе проектирования FastReport Studio рассматривались различные варинаты установки имен полей. В результате остановились на разделении имён через перевод строки.
    alman написал:
    Пример отлично работает.
    А вот с этим отчет всегда пустой.
      pDataSet->Name = "Name\nName_2\nName_3\n";
    Что не так?

    Поскольку датасет всегда привязывается к отчёту по имени, то скорее всего таким образом Вы нарушаете привязку датасета к отчету. Кроме того, я не уверен что имя датасета может содержать в себе перевод строки.

    Вы используете FastReport в дипломной работе? Приятно это слышать.
    alman написал:
    Это  имена столбцов, они используются в событии OnGetValue.
    На этапе проектирования FastReport Studio рассматривались различные варинаты установки имен полей. В результате остановились на разделении имён через перевод строки.
    Посмотрел пример frxCOM из папочки MAIN
    даже прояснения появились ;)

    а я просто не парился и в именах полей в отчете использую
    порядковый номер столбца ;)

    А функция StrToDouble может понимать числа с точкой, а не только с запятой
    а то зараза из базы лезут числа с точкой

    да и даты в формате YYYY-MM-DD (в региональных настройках все нормально)
    может где-то в базе настроить нужно?
    alman написал:
    Поскольку датасет всегда привязывается к отчёту по имени, то скорее всего таким образом Вы нарушаете привязку датасета к отчету. Кроме того, я не уверен что имя датасета может содержать в себе перевод строки.

    Вы используете FastReport в дипломной работе? Приятно это слышать.

    Посмотрю, попробую дать человеческое имя.

    Диплом на второе образование (балуюсь), потому и времени особо нет разбираться, только по ночам после основной работы

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

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