powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Crystal Reports + db login
14 сообщений из 14, страница 1 из 1
Crystal Reports + db login
    #33765237
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется следующее очень простое приложение, которое при нажатии на кнопку должно показывать отчет -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button1Click(Sender: TObject);
begin
      Crpe1.ReportName := 'C:\....\delphi projects\proj1 - cre test1\Report1.rpt';
      Crpe1.Connect.Clear;
      Crpe1.LogOnServer.Clear;
      Crpe1.LogOnInfo.Clear;
{      if Crpe1.LogOnServer.Count <  1  then
      begin
          Crpe1.LogOnServer.Retrieve;
      end;
//      Crpe1.LoadEngineOnUse := False;
//      Crpe1.Connect.Propagate := False;
      if Crpe1.LogOnServer.Count >  0  then
      begin
           Crpe1.LogOnServer[ 0 ].Password := 'cardsa';
           if not Crpe1.LogOnServer[ 0 ].LogOn then
                  ShowMessage('Error Logging on to Server');
      end;  }
      Crpe1.Show;
end;

Все бы ничего, но мне не удалось заставить чтобы НЕ использовались те логин/пароль/идбазы (у меня оракл), которые использовались при создании отчета в crystal reports редакторе... :(
Перепробовал много вариантов (см. закоментированные участки кода).

Как можно изменить отчет таким образом, чтобы
1. Ни в каком случае не использовались login info из самого отчета, а только то что будет _явно_ указано в своиствах Crpe1 в процедуре TForm1.Button1Click при активации отчета ?
2. Как заставаить, чтобы CR engine сама окошко показывало где бы предлагалось ввести логин/пароль/sid и пр нужной БД ?
3. И самое главное (именно в таком режиме будет работать в productional системе) - Как сделать чтобы использовалась существующая коннекция в приложении Delphi ? Т.е. при запуске системы - сразу приложение коннектится само, какие-то запросы само, а потом вызывает отчет, который ИСПОЛЬЗУЕТ УЖЕ СУЩЕСТВУЮЩЕЕ подключение к БД, выполняется в той же сессии.

Доки перерыл, которые поставлялись с VCL11 - таких примеров там не было... Заранее признаетелен за любую информацию, особенно относительно п.3.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33765290
Peter Kirillow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не скажу насчет дельфи, но в JavaAPI это делается почти легко.
есть много примеров по этому вопросу
http://support.businessobjects.com/communityCS/FilesAndUpdates/crserver_xi_jsp_samples.zip.asp?ref=devzone_javazone_main
(смотреть view_report_dblogon)
может поможет...
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33765384
Испльзую RDC.
Для каждого таблицы приходится явно устанавливать новый сервер/базу:

rpt.Database.Tables(1).SetLogonInfo(gs_servername,gs_dbname,login, pw)
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33765404
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прохожий_111Испльзую RDC.
Для каждого таблицы приходится явно устанавливать новый сервер/базу:
rpt.Database.Tables(1).SetLogonInfo(gs_servername,gs_dbname,login, pw)
1. Не подходит, т.к. отчеты подключаются к системе независимо и заранее не известно на каких таблицах будет основан каждый отчет. Отчетов планируется очень много, таблиц тоже не мало.
2. А как все-таки избавиться, чтобы CR engine не использовал logon info в самом отчете? Можно как-то сделать, чтобы пароль хотя-бы в отчете не сохранялся из редактора пока я отлаживаю отчет, потому что это как минимум не безопасно.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33765567
Wireless
1. Не подходит, т.к. отчеты подключаются к системе независимо и заранее не известно на каких таблицах будет основан каждый отчет. Отчетов планируется очень много, таблиц тоже не мало.

При назначении для таблицы новых сервер/база таблица указывается неявно - Tables(1). Что вам необходимо знать - количество таблиц в используемых в данном отчете(думаю в Cre данный метод тоже есть). Далее в цикле
for 1 to n
rpt.Database.Tables(n).SetLogonInfo(gs_servername,gs_dbname,login, pw)


Wireless

2. А как все-таки избавиться, чтобы CR engine не использовал logon info в самом отчете? Можно как-то сделать, чтобы пароль хотя-бы в отчете не сохранялся из редактора пока я отлаживаю отчет, потому что это как минимум не безопасно.

С точки зрения безопасности -
1)должны быть соответствующие привилегии
2) сохраняйте свои отчеты в базе.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33765909
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прохожий_111 Wireless
1. Не подходит, т.к. отчеты подключаются к системе независимо и заранее не известно на каких таблицах будет основан каждый отчет. Отчетов планируется очень много, таблиц тоже не мало.

При назначении для таблицы новых сервер/база таблица указывается неявно - Tables(1). Что вам необходимо знать - количество таблиц в используемых в данном отчете(думаю в Cre данный метод тоже есть). Далее в цикле
for 1 to n
rpt.Database.Tables(n).SetLogonInfo(gs_servername,gs_dbname,login, pw)

Все отчеты будут использовать либо запрос, либо вызов хранимых процедур, поэтому для CR это выглядит наверное как одна таблица?

Прохожий_111 Wireless
2. А как все-таки избавиться, чтобы CR engine не использовал logon info в самом отчете? Можно как-то сделать, чтобы пароль хотя-бы в отчете не сохранялся из редактора пока я отлаживаю отчет, потому что это как минимум не безопасно.

С точки зрения безопасности -
1) должны быть соответствующие привилегии
2) сохраняйте свои отчеты в базе.
1) Это понятно, но в репортах _не_ должны содержаться пароли в любом случае. Как сохранить отчеты таким образом, чтобы пользователь, под которым выполнялся отчет, а соотв-но и полномочия определялись только логикой программы, из которой эти отчеты будут вызываться?
2) в каком смысле? отчет=rpt-файл в CR, а CR уже потом данные может хоть откуда брать, в т.ч. из БД. Мы данные будем понятно в БД держать:), если вы про это...
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33766077
WirelessВсе отчеты будут использовать либо запрос, либо вызов хранимых процедур, поэтому для CR это выглядит наверное как одна таблица?

Запрос - как одна таблица. Процедура тоже одна. Но возможно используется другой метод назаначения сервера/базы.

Wireless
1) Это понятно, но в репортах _не_ должны содержаться пароли в любом случае. Как сохранить отчеты таким образом, чтобы пользователь, под которым выполнялся отчет, а соотв-но и полномочия определялись только логикой программы, из которой эти отчеты будут вызываться?
2) в каком смысле? отчет=rpt-файл в CR, а CR уже потом данные может хоть откуда брать, в т.ч. из БД. Мы данные будем понятно в БД держать:), если вы про это...

1) Отчет загружается в базу данных.
2) При вызове отчета он выгружается диск машины клиента.
3) При желании, после просмотра можно его уничтожить.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33766153
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прохожий_111Запрос - как одна таблица. Процедура тоже одна. Но возможно используется другой метод назаначения сервера/базы.
Замечательно! Про другой метод - не хотелось бы :)

Прохожий_1111) Отчет загружается в базу данных.
2) При вызове отчета он выгружается диск машины клиента.
3) При желании, после просмотра можно его уничтожить.
теперь понятна идея. красиво, подумаю,
но вопрос был о совсем другом... какая разница откуда rpt файл взялся?
в нем также будет содержатсья logon info достаточная для установления
соединения с БД. нужно чтобы rpt файл был чист, а подключение к БД
делало только приложение, которая этот файл непосредственно будет
вызывать....

не нужны standalone репорты, они должны быть application-dependent
в том смысле что без них работать не смогут отчеты хотя бы по той простой
причине, что приложение будет обеспечивать им подключение к базе.
как такое можно сделать?
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33766219
Пускай ваш rpt файл содержит информацию не имеющею отношения к реальному соединению. Вы ведь все равно будете ее переназначать.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33766227
При переназначении содержимое rpt не меняется.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33766385
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прохожий_111Пускай ваш rpt файл содержит информацию не имеющею отношения к реальному соединению.
Получается пока я создаю отчет я должен одни данные в logon info прописывать, а потом когда публикую отчет - другие данные? неудобно,
тем более что как вы понимаете отчеты нужно поддерживать и каждый раз
пробивать два раза logon info - сначала один, закончил - другой.
ерунда какая-то. думаю было бы логично если в CR это как-то
решается.

Прохожий_111Вы ведь все равно будете ее переназначать.
хех, см. мой первый пост - там как раз не получается переназначать -
я пароль неправильный прописал чтобы подключение не состоялось
и мне как и ожидалось выдалось окошко 'Error Logging on to Server',
а потом.... отчет все равно показался - CR взял данные для подключения
парвильный из самого .rpt.
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33767598
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что ответил мне индус в саппорте CR
MujeebFrom the issue description I understand that you want to use the existing database connection for generating reports in your Delphi application using VCL. If this is what you are looking for then its not possible. Our crystal engine is designed in such a way that reports can be populated with data in two ways Pull and Push.

The first method is Pull where you need to provide the logon information for secured database at runtime from your application. I guess this method is what you are using. For eg: If your report is connecting to secured Sql Server which requires password then you may have to pass connection information at runtime.

***************************
Crpe1.ReportName := 'C:\Company.rpt';
Crpe1.Connect.ServerName := 'WBSQLServer';
Crpe1.Connect.UserID := 'Elmer Fudd';
Crpe1.Connect.Password := 'Wabbit';
Crpe1.Connect.DatabaseName := 'Company1';
if Crpe1.Connect.Test then
Crpe1.Show
else
ShowMessage('Error Connecting');
***************************

Note: The same code applies if you want to change the database at runtime. So you have to use the Application DB Connection Info in to your VCL reports.

The second method is Push where you will use Dataset at runtime to populate reports. You will be designing reports using TTX or XSD and TClientDataset as the source at runtime.

***************************
CrpeDS_Section.DataSet := dsSection;
dsSection.Active := TRUE;
CrpeSample.Tables[0].Create;
CrpeSample.Tables[0].DataPointer := CrpeDS_Section.DataPointer;
if CrpeSample.HasSavedData then begin
CrpeSample.DiscardSavedData;
end;
TRY
CrpeSample.Show;
EXCEPT
on E: Exception do begin
MessageDlg('Error CrpeSample Show. ' + E.Message, mtError, [mbOK], 0);
end;
END;
*****************************

Regarding your second query: Crystal Reports does not store password in rpt file. As I said above, if you are reporting of secured database then you need to pass connection information at runtime.

т.е. первое - в делфи все-таки нельзя использовать существующую коннекцию,

а второе - что пароли в rpt не сохраняются (что полная ерунда - см.мой первый пост).
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33768001
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока не ответили еще .. спят)

а вот знакомые мне сказали, что тоже делали чтобы использовалась существующая коннекция к БД из приложения, правда делали это в PowerBuilder.

итак, в джаве можно, в PB - тоже, а почему в Delphi нельзя?
думаю, что они в конечном итоге пользуются одними и теми же DLL, т.е. API тот же, откуда же такое ограничение?
...
Рейтинг: 0 / 0
Crystal Reports + db login
    #33879365
iNatty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу внимания к этой теме..
Складывается ощущение, что имя файла - это часть коннекта, хотя в коде - имя файла - это TCrpe.ReportName, а не (TCrpe.Connect.ReportName)...
Но даже в случае написания
TCrpe.ReportName := .....
после
TCrpe.Connect.DataBase := , ServerName := и так далее
- уже получаем ошибку 536 - недостаточно параметров или они некорректны..
Так все-таки есть какой-то метод использования одной конекции?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Crystal Reports + db login
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]