Автоматический коннект к БД
У меня есть БД с отчетами (в BLOB полях).
В отчетах при их создании прописывался сервер БД, база, параметры...
У меня в организации есть N отделов, которые пользуются программой. Каждый отдел - обособленная БД, а бывает даже другой сервер.
Вопрос:
Отчеты для каждого отдела одинаковые, но когда я их переношу, то нужно менять строку коннекта. При массовых изменениях это ОЧЕНЬ напрягает.
штук 30 отчетов на, скажем, 10 БД - пол дня работы.
При вызове отчета на построение - я передаю отчету строку коннекта и отчет строится с нужной строкой коннекта, но когда я открываю его на редактирование - жду минуту/полторы пока он откроется, ругнется на несуществующую для него БД и/или сервер, потом с паузами поругается на каждый из кликов на полях формы и т.д. Вобщем пока не изменю коннект на существующую БД.
Я подозреваю, что отчет пытается подсоединиться к базе, чтобы вычитать какие-то параметры, поля таблиц и т.д., но почему он это делает даже тогда, когда стоит ADODatabase.Connected = false? Напрягает здорово.
Как этого избежать?
PS: есть подозрения, что и при построении отчета он тоже пытается подключиться к прописанной в ADODatabase базе, хотя там стоит тот же ADODatabase.Connected = false
В данном случае он на попытки тратит существенно меньше времени, но всё же...
В отчетах при их создании прописывался сервер БД, база, параметры...
У меня в организации есть N отделов, которые пользуются программой. Каждый отдел - обособленная БД, а бывает даже другой сервер.
Вопрос:
Отчеты для каждого отдела одинаковые, но когда я их переношу, то нужно менять строку коннекта. При массовых изменениях это ОЧЕНЬ напрягает.
штук 30 отчетов на, скажем, 10 БД - пол дня работы.
При вызове отчета на построение - я передаю отчету строку коннекта и отчет строится с нужной строкой коннекта, но когда я открываю его на редактирование - жду минуту/полторы пока он откроется, ругнется на несуществующую для него БД и/или сервер, потом с паузами поругается на каждый из кликов на полях формы и т.д. Вобщем пока не изменю коннект на существующую БД.
Я подозреваю, что отчет пытается подсоединиться к базе, чтобы вычитать какие-то параметры, поля таблиц и т.д., но почему он это делает даже тогда, когда стоит ADODatabase.Connected = false? Напрягает здорово.
Как этого избежать?
PS: есть подозрения, что и при построении отчета он тоже пытается подключиться к прописанной в ADODatabase базе, хотя там стоит тот же ADODatabase.Connected = false
В данном случае он на попытки тратит существенно меньше времени, но всё же...
Комментарии
Для такого случае имеет смысл исползовать базу данных по умалчанию.
В этом случае строка соединения к базе данных хранится в системном реестре компьютера. Таким образом, отчёт может быть перенесён на другой компьютер, при этом будет использоваться база данных, специфичная для этого компьютера.
Чтобы создать такой отчёт, необходимо использовать внешний диайнер отчётов, который поставляется вместе с FR Studio.
В это случае, меню "Отчёт" -> "Данные" покажет список соединений к базе данных, зарегистрированных на этом компьютере. В каждом отчёте может быть выбрано не более одной базы данных по умалчанию. При этом, отчёт не должен содержать объектов TfrxADODatabase.
Для редактирования соединений с базами данных по умалчанию, используйте внешний дизайнер отчётов. Меню "Вид" -> "Подключения".
К сожалению, данный способ не совместим с многопоточностью, а именно - если вы будете строить отчёты из разных потоков, то использовать соединение по умолчанию нельзя. Если строите отчёты в одном потоке, то проблем возникнуть не должно.
Наверное, с данным вопросом лучше обратиться в support@fast-report.com
За помощью на support обратился. Жду ответа.
В предложенном Вами варианте, насколько я понимаю, на каждой клиентской машине придется настраивать БД по-умолчанию? В принципе можно, но неужели нельзя обойтись без дополнительных манипуляций с клиентскими машинами?
Кроме того данное решение неприменимо к тому случаю, когда аналитик хочет посмотреть данные то из одной базы, то из другой. Для моего варианта просто будет заменяться строка коннекта, а в Вашем случае аналитику придется пересаживаться на другой ПК
Если есть доступ к коду программы - то достаточно просто реализовывается подстановка нужного коннекта и даже строки запроса данных.
Но нужно немного доработать структуру отчета - в частности, использовать не встроенную БД, а объект "База данных АДО" или ему подобный.
Далее, на него завязывать запрос(ы) или таблицу(ы). Надо убедиться, что ADODatabase.Connected = false, т.е. соотвествующий чекбокс отключен.
В программе натравливаем код на фастрепортовскую библиотеку, открываем файл отчета, запускаем в ADODatabase строку конекта,
выставляем Connected = true программно, затем (если надо) ищем главный объект источника данных, и засылаем его строку запроса.
Я сделал "главному источнику" стандартное имя - это позволяет открывать отчеты единообразно.
после чего юзаем ShowReport() - и отчет отлично показывается.
Вообще у меня реализована подсистема с динамическим меню, которая в себя нагружает имеющиеся отчты по списку, которых соддержит имена отчетов
и параметры их открытия (запросы в частности. один отчет может открываться с разными запросами - в зависимости от задачи)
Таким образом распространение отчетов становится весьма прсотым делом - распространяется отчет и апдэйтится список (я его храню в БД, историчски сложилось, но ничто не мешает организовать хранение иным способом).
Вобщем если надо подробные разъяснения - обращайтесь. Если смогу - попытаюсь разъяснить.
Файлы форм FastReport (FR3 файлы), это обычные текстовые файлы в формате XML. Если нужно массово поправить кучу форм. Можете просто отредактировать их в любом текстовом редакторе.
Например строка подключения будет выглядеть как то так