Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автоматизация переключения схем данных в runtime для Delphi 5 и Crystal Reports 8.5

Delphi , Базы данных , Oracle

Вопрос пользователя связан с необходимостью изменения схемы данных в runtime для приложения, написанного на Delphi 5, которое использует Crystal Reports 8.5. Текущее соединение осуществляется под одним пользователем, и для отчетов используется следующий код:

with tcrpe.Create(self) do
try
  // инициализация отчета
  // ...
finally
  CloseJob;
end;

Проблема заключается в том, что теперь в системе есть две схемы (sysdba и sysdba2), и необходимо настроить отчеты так, чтобы при входе под пользователем sysdba данные брались из таблицы sysdba.lot_recap, а при входе под пользователем sysdba2 - из таблицы sysdba2.lot_recap. В текущем запросе Crystal Reports используется следующая структура:

SELECT ...
FROM "SYSDBA"."LOT_RECAP" LOT_RECAP
WHERE ...
ORDER BY ...

Пользователю необходимо автоматизировать процесс изменения схемы для около 300 отчетов.

Решение проблемы

Пользователь предложил альтернативные варианты решения, включая создание представления, которое объединяет данные из обеих таблиц и позволяет отфильтровать результаты по пользователю. Однако, в комментариях упоминается, что таблицы являются таковыми, а не представлениями, и что изменение запроса в Crystal Reports для каждого отчета вручную не представляется возможным из-за большого количества отчетов.

Подтвержденный ответ

Проблема была решена путем изменения настроек локации в самом отчете Crystal Reports. Если удалить из локации имя схемы, то Crystal Reports позволит динамически назначать имя схемы на основе имени пользователя, под которым осуществляется вход.

Пример кода

Для автоматизации переключения схемы данных в runtime, можно использовать следующий подход:

  1. В коде Delphi перед выполнением отчета, определить текущую схему, под которой выполняется запрос:
var
  CurrentSchema: string;
begin
  CurrentSchema := GetCurrentSchema(); // Функция для получения текущей схемы
  // ...
  ReportQuery := FormatQuery(CurrentSchema);
end;
  1. Создать функцию GetCurrentSchema, которая возвращает имя схемы на основе имени пользователя:
function GetCurrentSchema: string;
begin
  // Логика для определения схемы на основе имени пользователя
  if UserName = 'sysdba' then
    Exit('sysdba');
  if UserName = 'sysdba2' then
    Exit('sysdba2');
  // ...
end;
  1. Изменить функцию FormatQuery, чтобы она возвращала правильный запрос с учетом текущей схемы:
function FormatQuery(const Schema: string): string;
begin
  // Формирование запроса с учетом указанной схемы
  Result := Format('SELECT ... FROM "%s"."LOT_RECAP" LOT_RECAP WHERE ...', [Schema]);
end;
  1. В настройках локации отчета Crystal Reports указать путь без имени схемы:
FROM "LOT_RECAP" LOT_RECAP
  1. В коде Delphi перед выполнением отчета установить параметры локации, используя функцию ReportName:
with tcrpe.Create(self) do
try
  ReportName := 'Путь_к_файлу_отчета' + FormatQuery(CurrentSchema);
  // ...
finally
  CloseJob;
end;

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

Создано по материалам из источника по ссылке.

Задача заключается в автоматизации переключения схем данных для приложения на Delphi 5, использующего Crystal Reports 8.5, чтобы отчеты могли динамически выбирать данные из разных схем в зависимости от пользователя.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Oracle ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:18:50/0.003216028213501/0