Fast Report Enterprise Edition

отредактировано 15:18 Раздел: FastReport 4.0
Здравствуйте!

Уже устал писать в support - все мои запросы, тестовые примеры с демонстрацией ошибок уходят туда, как в бездонную бочку.
Максимум, чего удалось добиться ЗА МЕСЯЦ страданий - это статус "Принято к рассмотрению" для небольшой части моих запросов :-\

Пишу сюда, в надежде, что в глазах общественности разработчики проявять уважение к пользователям их продукта и займутся своими прямыми обязанностями - ИСПРАВЛЕНИЮ ДУРАЦКИХ ОШИБОК и доведению до ума жалких поделок с именами TfrxReportClient и TfrxReportServer, входящие в состав Enterprise-редакции.

Про ошибки здесь повторяться не буду, а вот про идеологию хотелось бы услышать адекватный ответ.

Ситуация: имеется самописный сервер приложений, выступающий в роли мультиплексора между пользователями и базами данных.
Для каждой базы данных в сервере есть своя пара TADOConnection и TfrxReportServer.
Собственно, хочется, чтобы каждый экземпляр сервера отчётов был привязан к конкретному соединению с базой данных и строил отчёты именно через него, а не передевал окультными путями в отчёт необходимый ConnectionString.

Есть такой замечательный компонент - TfrxADOComponents.
Умеет привязываться к ADOConnection и раздавать это соединение всем наборам данных в отчётах.
Но вот беда-то в чём - компонентик этот почему-то связывается не с TfrxReportServer, А С ГЛОБАЛЬНОЙ ПЕРЕМЕННОЙ ADOComponents в модуле frxADOComponents! Получается следующий эффект - каждое последующее соединение сервера к новой базе данных подменяет существующие соединения к БД у всех экземпляров серверов отчётов!

Уважаемые разработчики!
Подскажите выход из сложившейся ситуации.
Я сомневаюсь, что здесь есть простое решение, поэтому хотелось бы услышать, сколько примерно времени займёт решение данной проблемы?

p.s.> Я уже миллион раз проклял тот день, когда приобрёл ваш продукт.

Комментарии

  • Stalker4Stalker4 123
    отредактировано 15:18
    написал: »
    Есть такой замечательный компонент - TfrxADOComponents.
    Умеет привязываться к ADOConnection и раздавать это соединение всем наборам данных в отчётах.
    Но вот беда-то в чём - компонентик этот почему-то связывается не с TfrxReportServer, А С ГЛОБАЛЬНОЙ ПЕРЕМЕННОЙ ADOComponents в модуле frxADOComponents! Получается следующий эффект - каждое последующее соединение сервера к новой базе данных подменяет существующие соединения к БД у всех экземпляров серверов отчётов!

    Уважаемые разработчики!
    Подскажите выход из сложившейся ситуации.
    Я сомневаюсь, что здесь есть простое решение, поэтому хотелось бы услышать, сколько примерно времени займёт решение данной проблемы?

    Я правда не разработчик, но совет могу дать:

    Возьми TfrxADOComponents и перепиши в них работу касающуюся DefaultDatabase и глобального свойства ADOComponents.
    В свое время, когда я делал свои движки для FR, я отказался от этого механизма, так как он ограничивает возможности движка.
    В качестве примера посмотри мой движки. Они есть в бинарной конфе или на моем сайте http://stalker4.dp.ua
  • отредактировано 15:18
    Stalker4,
    Спасибо за ответ!

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

    По-моему проблема глубже. Вот пример:

    1. Конструктор TfrxADOQuery:
    constructor TfrxADOQuery.Create(AOwner: TComponent);
    begin
      FStrings := TStringList.Create;
      FQuery := TADOQuery.Create(nil);
    {$IFDEF Delphi7}
      FQuery.LockType := ltReadOnly;
    {$ENDIF}
      Dataset := FQuery;
      SetDatabase(nil);
      FLock := False;
      inherited;
    end;
    

    2. Метод SetDatabase:
    procedure TfrxADOTable.SetDatabase(Value: TfrxADODatabase);
    begin
      FDatabase := Value;
      if Value <> nil then
        FTable.Connection := Value.Database
      else if ADOComponents <> nil then
        FTable.Connection := ADOComponents.DefaultDatabase
      else
        FTable.Connection := nil;
      DBConnected := FTable.Connection <> nil;
    end;
    

    Как видно, при создании отчётом экземпляра TfrxADOQuery ему всегда присваивается глобальное соединение (SetDatabase(nil)).
    Очень хотелось бы вместо этого увидеть что-нибуть вроде такого кода:
    constructor TfrxADOQuery.Create(AOwner: TComponent);
    begin
      ...
      SetDatabase(Report.DefaultDatabase);
      inherited;
    end;
    

    Но как в таком случае связать Report с различными движками БД?
  • Stalker4Stalker4 123
    отредактировано 15:18
    Я бы не сказал, что глубже.

    Посмотри мой метод TfrxAsaDataSet.Create, у меня там SetDatabase(nil) нет вообще. Как и нет самого этого метода.
    Я просто для свойства TfrxAsaDataSet.Session (это аналог свойства TQuery.Databasename) написал соответствующие обработчики (TfrxAsaDataSet.SetSession, TfrxAsaDataSet.SetSessionName). Ну и PE для этого свойства тоже сделал.
    Свойство Session это ссылка на компонент TASASession (аналог TDataBase), т.е. фактически это и есть твоя строка коннекта.
    И я могу ей присваивать как ссылку на "внутрению базу" (TfrxAsaSession - в FR), так и на внешнию базу (TASASession в Delphi).

  • отредактировано 15:18
    написал: »
    Уже устал писать в support - все мои запросы, тестовые примеры с демонстрацией ошибок уходят туда, как в бездонную бочку.
    Максимум, чего удалось добиться ЗА МЕСЯЦ страданий - это статус "Принято к рассмотрению" для небольшой части моих запросов :-\

    Пишу сюда, в надежде, что в глазах общественности разработчики проявять уважение к пользователям их продукта и займутся своими прямыми обязанностями - ИСПРАВЛЕНИЮ ДУРАЦКИХ ОШИБОК и доведению до ума жалких поделок с именами TfrxReportClient и TfrxReportServer, входящие в состав Enterprise-редакции.

    Это нормально, советую сразу оставить надежду на какую-то помощь от разработчиков. Ошибки, которые я нашел (и прислал код с исправлениями)в серверных компонентах два с лишним года назад (еще в 3-й версии) до сих пор не исправлены, на письма разработчикам, в форум и лично М. Филиппенко поимел только обещания все поправить в ближайшее время. Видимо, 2.5 года - еще не ближайшее время :)

    Вот здесь я на форуме об этом писал
    [url="http://fast-report.com/ru/forum/index.php?showtopic=4130&st=0&p=15199�entry15199" ] http://fast-report.com/ru/forum/index.php?...5533;entry15199[/url]
    [url="http://fast-report.com/ru/forum/index.php?showtopic=4639&st=0&p=17030�entry17030" ] http://fast-report.com/ru/forum/index.php?...5533;entry17030[/url]

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

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