Автоматический коннект к БД

отредактировано 05:53 Раздел: FastReport Studio
У меня есть БД с отчетами (в BLOB полях).
В отчетах при их создании прописывался сервер БД, база, параметры...
У меня в организации есть N отделов, которые пользуются программой. Каждый отдел - обособленная БД, а бывает даже другой сервер.

Вопрос:
Отчеты для каждого отдела одинаковые, но когда я их переношу, то нужно менять строку коннекта. При массовых изменениях это ОЧЕНЬ напрягает.
штук 30 отчетов на, скажем, 10 БД - пол дня работы.

При вызове отчета на построение - я передаю отчету строку коннекта и отчет строится с нужной строкой коннекта, но когда я открываю его на редактирование - жду минуту/полторы пока он откроется, ругнется на несуществующую для него БД и/или сервер, потом с паузами поругается на каждый из кликов на полях формы и т.д. Вобщем пока не изменю коннект на существующую БД.
Я подозреваю, что отчет пытается подсоединиться к базе, чтобы вычитать какие-то параметры, поля таблиц и т.д., но почему он это делает даже тогда, когда стоит ADODatabase.Connected = false? Напрягает здорово.
Как этого избежать?

PS: есть подозрения, что и при построении отчета он тоже пытается подключиться к прописанной в ADODatabase базе, хотя там стоит тот же ADODatabase.Connected = false
В данном случае он на попытки тратит существенно меньше времени, но всё же...

Комментарии

  • almanalman космополит
    отредактировано 05:53
    написал:
    Вопрос:
    Отчеты для каждого отдела одинаковые, но когда я их переношу, то нужно менять строку коннекта. При массовых изменениях это ОЧЕНЬ напрягает.
    штук 30 отчетов на, скажем, 10 БД - пол дня работы.

    Для такого случае имеет смысл исползовать базу данных по умалчанию.
    В этом случае строка соединения к базе данных хранится в системном реестре компьютера. Таким образом, отчёт может быть перенесён на другой компьютер, при этом будет использоваться база данных, специфичная для этого компьютера.

    Чтобы создать такой отчёт, необходимо использовать внешний диайнер отчётов, который поставляется вместе с FR Studio.

    В это случае, меню "Отчёт" -> "Данные" покажет список соединений к базе данных, зарегистрированных на этом компьютере. В каждом отчёте может быть выбрано не более одной базы данных по умалчанию. При этом, отчёт не должен содержать объектов TfrxADODatabase.

    Для редактирования соединений с базами данных по умалчанию, используйте внешний дизайнер отчётов. Меню "Вид" -> "Подключения".

    К сожалению, данный способ не совместим с многопоточностью, а именно - если вы будете строить отчёты из разных потоков, то использовать соединение по умолчанию нельзя. Если строите отчёты в одном потоке, то проблем возникнуть не должно.
    написал:
    При вызове отчета на построение - я передаю отчету строку коннекта и отчет строится с нужной строкой коннекта, но когда я открываю его на редактирование - жду минуту/полторы пока он откроется, ругнется на несуществующую для него БД и/или сервер, потом с паузами поругается на каждый из кликов на полях формы и т.д. Вобщем пока не изменю коннект на существующую БД.
    Я подозреваю, что отчет пытается подсоединиться к базе, чтобы вычитать какие-то параметры, поля таблиц и т.д., но почему он это делает даже тогда, когда стоит ADODatabase.Connected = false? Напрягает здорово.
    Как этого избежать?

    Наверное, с данным вопросом лучше обратиться в support@fast-report.com
  • отредактировано 05:53
    alman написал:
    Для такого случае имеет смысл исползовать базу данных по умалчанию.
    В этом случае строка соединения к базе данных хранится в системном реестре компьютера. Таким образом, отчёт может быть перенесён на другой компьютер, при этом будет использоваться база данных, специфичная для этого компьютера.
    Спасибо.
    За помощью на support обратился. Жду ответа.
    В предложенном Вами варианте, насколько я понимаю, на каждой клиентской машине придется настраивать БД по-умолчанию? В принципе можно, но неужели нельзя обойтись без дополнительных манипуляций с клиентскими машинами?
    Кроме того данное решение неприменимо к тому случаю, когда аналитик хочет посмотреть данные то из одной базы, то из другой. Для моего варианта просто будет заменяться строка коннекта, а в Вашем случае аналитику придется пересаживаться на другой ПК ;)
  • отредактировано 05:53
    А можно вот такой вопрос, есть ли какая -нибудь лазейка чтоб поменять коннект к базе одновременно у нескольких отчетов, очень не нравится тратить время на изменение коннекта, открывая каждый отчет по отдельности. Подскажите есть ли уже подобные вещи или можно ли такое написать самим и с помощью каких средств
  • отредактировано May 2011
    Maxim Koval написал: »
    У меня есть БД с отчетами (в BLOB полях).
    В отчетах при их создании прописывался сервер БД, база, параметры...
    У меня в организации есть N отделов, которые пользуются программой. Каждый отдел - обособленная БД, а бывает даже другой сервер.

    Вопрос:
    Отчеты для каждого отдела одинаковые, но когда я их переношу, то нужно менять строку коннекта. При массовых изменениях это ОЧЕНЬ напрягает.
    штук 30 отчетов на, скажем, 10 БД - пол дня работы.

    При вызове отчета на построение - я передаю отчету строку коннекта и отчет строится с нужной строкой коннекта, но когда я открываю его на редактирование - жду минуту/полторы пока он откроется, ругнется на несуществующую для него БД и/или сервер, потом с паузами поругается на каждый из кликов на полях формы и т.д. Вобщем пока не изменю коннект на существующую БД.
    Я подозреваю, что отчет пытается подсоединиться к базе, чтобы вычитать какие-то параметры, поля таблиц и т.д., но почему он это делает даже тогда, когда стоит ADODatabase.Connected = false? Напрягает здорово.
    Как этого избежать?

    PS: есть подозрения, что и при построении отчета он тоже пытается подключиться к прописанной в ADODatabase базе, хотя там стоит тот же ADODatabase.Connected = false
    В данном случае он на попытки тратит существенно меньше времени, но всё же...
    Maxim Koval написал: »
    А можно вот такой вопрос, есть ли какая -нибудь лазейка чтоб поменять коннект к базе одновременно у нескольких отчетов, очень не нравится тратить время на изменение коннекта, открывая каждый отчет по отдельности. Подскажите есть ли уже подобные вещи или можно ли такое написать самим и с помощью каких средств


    Если есть доступ к коду программы - то достаточно просто реализовывается подстановка нужного коннекта и даже строки запроса данных.

    Но нужно немного доработать структуру отчета - в частности, использовать не встроенную БД, а объект "База данных АДО" или ему подобный.
    Далее, на него завязывать запрос(ы) или таблицу(ы). Надо убедиться, что ADODatabase.Connected = false, т.е. соотвествующий чекбокс отключен.

    В программе натравливаем код на фастрепортовскую библиотеку, открываем файл отчета, запускаем в ADODatabase строку конекта,
    выставляем Connected = true программно, затем (если надо) ищем главный объект источника данных, и засылаем его строку запроса.
    Я сделал "главному источнику" стандартное имя - это позволяет открывать отчеты единообразно.
    после чего юзаем ShowReport() - и отчет отлично показывается.

    Вообще у меня реализована подсистема с динамическим меню, которая в себя нагружает имеющиеся отчты по списку, которых соддержит имена отчетов
    и параметры их открытия (запросы в частности. один отчет может открываться с разными запросами - в зависимости от задачи)

    Таким образом распространение отчетов становится весьма прсотым делом - распространяется отчет и апдэйтится список (я его храню в БД, историчски сложилось, но ничто не мешает организовать хранение иным способом).

    Вобщем если надо подробные разъяснения - обращайтесь. Если смогу - попытаюсь разъяснить.
  • xlaalaaxlaalaa Минск
    отредактировано 05:53
    ktrn написал: »
    А можно вот такой вопрос, есть ли какая -нибудь лазейка чтоб поменять коннект к базе одновременно у нескольких отчетов, очень не нравится тратить время на изменение коннекта, открывая каждый отчет по отдельности. Подскажите есть ли уже подобные вещи или можно ли такое написать самим и с помощью каких средств

    Файлы форм FastReport (FR3 файлы), это обычные текстовые файлы в формате XML. Если нужно массово поправить кучу форм. Можете просто отредактировать их в любом текстовом редакторе.

    Например строка подключения будет выглядеть как то так
        <TfrxADODatabase Name="MyDatabase1" DatabaseName="Provider=SQLOLEDB.1;Password=Password;Persist Security Info=True;User ID=User1;Initial Catalog=MyBASE1;Data Source=MyServer1;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MyPc1;Use Encryption for Data=False;Tag with column collation when possible=False" LoginPrompt="False" Connected="True" PropData="05704C65667402400470546F700214"/>
    

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

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