Явный коннект к БД

отредактировано 14:26 Раздел: FastReport 4.0
Хочется странного. Есть база MSSQL, есть пакет программ который работает с четко указанной базой, настройки по соединению с которой хранятся в реестре. Тип соединения ADO.
Соответственно отчеты хранятся в БД, есть желание чтобы клиенты сами могли строить отчеты и сохранять их в БД.
Для этого необходимо чтобы стандартные компоненты ADO в FR использовали бы четко указанный TADOConnection из программы, а не создавали бы свою копию данного объекта, а так же чтобы у них небыло возможности изменить свойства коннекта. Т.е TfrxADODatabase при дизайне отчета четко бы указывал на объект TADOConnection в программе, без возможности изменения каких либо своих свойств.
Таким образом пользователь бросает на форму коннекшн и присоединияет к нему TfrxADOQuery не устанавливая никаких свойств коннекта, используется коннект из программы.
Пока все что приходит в голову это свой набор компонентов доступа, аналог frxADOComponents, но несколько модифицированный. Но не совсем понятно как передать в создаваемый объект TfrxADODatabase.FDatabase свой TADOConnection.
Хотя может быть есть какие-то более красивые варианты?

Комментарии

  • RhinoFCRhinoFC Новосибирск
    отредактировано 14:26
    WildFrag написал: »
    Хочется странного. Есть база MSSQL, есть пакет программ который работает с четко указанной базой, настройки по соединению с которой хранятся в реестре. Тип соединения ADO.
    Соответственно отчеты хранятся в БД, есть желание чтобы клиенты сами могли строить отчеты и сохранять их в БД.
    Для этого необходимо чтобы стандартные компоненты ADO в FR использовали бы четко указанный TADOConnection из программы, а не создавали бы свою копию данного объекта, а так же чтобы у них небыло возможности изменить свойства коннекта. Т.е TfrxADODatabase при дизайне отчета четко бы указывал на объект TADOConnection в программе, без возможности изменения каких либо своих свойств.
    Таким образом пользователь бросает на форму коннекшн и присоединияет к нему TfrxADOQuery не устанавливая никаких свойств коннекта, используется коннект из программы.
    Пока все что приходит в голову это свой набор компонентов доступа, аналог frxADOComponents, но несколько модифицированный. Но не совсем понятно как передать в создаваемый объект TfrxADODatabase.FDatabase свой TADOConnection.
    Хотя может быть есть какие-то более красивые варианты?

    Хм... А зачем вообще это делать? Вот, в приложении вы положили куда-то там компонент TfrxADOComponents, чтобы ADO стали доступны в дизайнере отчётов. Наверняка установили ему свойство DefaultDatabase, указав ADOConnection, используемый вашей программой. Ну и больше не надо ни чего. Теперь в дизайнере отчётов все ADOTable и ADOQuery, которые пользователи кинут в отчёт, автоматически будут настроены на тот-же коннект, что и вся прога. Правда они также смогут кинуть ещё и ADOConnect и настроить его как хотят, но тогда это будут уже их проблемы (а может действительно сильно понадобится).
    Или я чего-то не правильно понял?
  • отредактировано 14:26
    В общем и целом понимаете правильно, но именно и хотелось бы избежать момента шаловливых рук пользователя и коннекта к произвольной БД.
    Т.е Ваш вариант в принципе подходит при условии отсутствия на панели компонента TfrxADODatabase и автоматическому использованию всеми кверями указанного в TADOComponents.
  • RhinoFCRhinoFC Новосибирск
    отредактировано 14:26
    WildFrag написал: »
    В общем и целом понимаете правильно, но именно и хотелось бы избежать момента шаловливых рук пользователя и коннекта к произвольной БД.
    Т.е Ваш вариант в принципе подходит при условии отсутствия на панели компонента TfrxADODatabase и автоматическому использованию всеми кверями указанного в TADOComponents.

    Ну в общем тоже не проблема. В приложении назначьте обработчик события frxDesigner.OnInsertObject с таким кодом:
    procedure TForm1.frxDesigner1InsertObject(Sender: TObject);
    begin
      if Sender is TfrxADODatabase then
      begin
        Sender.Free;
        raise Exception.Create('Низя!');
      end;
    end;
    

    В этом случае в дизайнере компонент будет виден, но добавить его пользователи не смогут. Зато можно разрулить это дело по правам доступа (кому-то можно, кому-то нет). А вот совсем убрать ADODatabase из дизайнера без модификации исходников FR наверно не получится. Хотя как знать, я не особо копался.
  • отредактировано 14:26
    А вот повеситься на бросание объекта в дизайнере мне в голову не пришло, огромное спасибо за подсказку :)

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

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