|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Имеется следующее очень простое приложение, которое при нажатии на кнопку должно показывать отчет - Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Все бы ничего, но мне не удалось заставить чтобы НЕ использовались те логин/пароль/идбазы (у меня оракл), которые использовались при создании отчета в crystal reports редакторе... :( Перепробовал много вариантов (см. закоментированные участки кода). Как можно изменить отчет таким образом, чтобы 1. Ни в каком случае не использовались login info из самого отчета, а только то что будет _явно_ указано в своиствах Crpe1 в процедуре TForm1.Button1Click при активации отчета ? 2. Как заставаить, чтобы CR engine сама окошко показывало где бы предлагалось ввести логин/пароль/sid и пр нужной БД ? 3. И самое главное (именно в таком режиме будет работать в productional системе) - Как сделать чтобы использовалась существующая коннекция в приложении Delphi ? Т.е. при запуске системы - сразу приложение коннектится само, какие-то запросы само, а потом вызывает отчет, который ИСПОЛЬЗУЕТ УЖЕ СУЩЕСТВУЮЩЕЕ подключение к БД, выполняется в той же сессии. Доки перерыл, которые поставлялись с VCL11 - таких примеров там не было... Заранее признаетелен за любую информацию, особенно относительно п.3. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 11:02 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
не скажу насчет дельфи, но в JavaAPI это делается почти легко. есть много примеров по этому вопросу http://support.businessobjects.com/communityCS/FilesAndUpdates/crserver_xi_jsp_samples.zip.asp?ref=devzone_javazone_main (смотреть view_report_dblogon) может поможет... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 11:18 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Испльзую RDC. Для каждого таблицы приходится явно устанавливать новый сервер/базу: rpt.Database.Tables(1).SetLogonInfo(gs_servername,gs_dbname,login, pw) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 11:46 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Прохожий_111Испльзую RDC. Для каждого таблицы приходится явно устанавливать новый сервер/базу: rpt.Database.Tables(1).SetLogonInfo(gs_servername,gs_dbname,login, pw) 1. Не подходит, т.к. отчеты подключаются к системе независимо и заранее не известно на каких таблицах будет основан каждый отчет. Отчетов планируется очень много, таблиц тоже не мало. 2. А как все-таки избавиться, чтобы CR engine не использовал logon info в самом отчете? Можно как-то сделать, чтобы пароль хотя-бы в отчете не сохранялся из редактора пока я отлаживаю отчет, потому что это как минимум не безопасно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 11:53 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
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) сохраняйте свои отчеты в базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 12:25 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Прохожий_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 уже потом данные может хоть откуда брать, в т.ч. из БД. Мы данные будем понятно в БД держать:), если вы про это... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 13:38 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
WirelessВсе отчеты будут использовать либо запрос, либо вызов хранимых процедур, поэтому для CR это выглядит наверное как одна таблица? Запрос - как одна таблица. Процедура тоже одна. Но возможно используется другой метод назаначения сервера/базы. Wireless 1) Это понятно, но в репортах _не_ должны содержаться пароли в любом случае. Как сохранить отчеты таким образом, чтобы пользователь, под которым выполнялся отчет, а соотв-но и полномочия определялись только логикой программы, из которой эти отчеты будут вызываться? 2) в каком смысле? отчет=rpt-файл в CR, а CR уже потом данные может хоть откуда брать, в т.ч. из БД. Мы данные будем понятно в БД держать:), если вы про это... 1) Отчет загружается в базу данных. 2) При вызове отчета он выгружается диск машины клиента. 3) При желании, после просмотра можно его уничтожить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 14:19 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Прохожий_111Запрос - как одна таблица. Процедура тоже одна. Но возможно используется другой метод назаначения сервера/базы. Замечательно! Про другой метод - не хотелось бы :) Прохожий_1111) Отчет загружается в базу данных. 2) При вызове отчета он выгружается диск машины клиента. 3) При желании, после просмотра можно его уничтожить. теперь понятна идея. красиво, подумаю, но вопрос был о совсем другом... какая разница откуда rpt файл взялся? в нем также будет содержатсья logon info достаточная для установления соединения с БД. нужно чтобы rpt файл был чист, а подключение к БД делало только приложение, которая этот файл непосредственно будет вызывать.... не нужны standalone репорты, они должны быть application-dependent в том смысле что без них работать не смогут отчеты хотя бы по той простой причине, что приложение будет обеспечивать им подключение к базе. как такое можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 14:44 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Пускай ваш rpt файл содержит информацию не имеющею отношения к реальному соединению. Вы ведь все равно будете ее переназначать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 15:03 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
При переназначении содержимое rpt не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 15:04 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Прохожий_111Пускай ваш rpt файл содержит информацию не имеющею отношения к реальному соединению. Получается пока я создаю отчет я должен одни данные в logon info прописывать, а потом когда публикую отчет - другие данные? неудобно, тем более что как вы понимаете отчеты нужно поддерживать и каждый раз пробивать два раза logon info - сначала один, закончил - другой. ерунда какая-то. думаю было бы логично если в CR это как-то решается. Прохожий_111Вы ведь все равно будете ее переназначать. хех, см. мой первый пост - там как раз не получается переназначать - я пароль неправильный прописал чтобы подключение не состоялось и мне как и ожидалось выдалось окошко 'Error Logging on to Server', а потом.... отчет все равно показался - CR взял данные для подключения парвильный из самого .rpt. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2006, 15:46 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Вот что ответил мне индус в саппорте 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 не сохраняются (что полная ерунда - см.мой первый пост). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2006, 06:00 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
пока не ответили еще .. спят) а вот знакомые мне сказали, что тоже делали чтобы использовалась существующая коннекция к БД из приложения, правда делали это в PowerBuilder. итак, в джаве можно, в PB - тоже, а почему в Delphi нельзя? думаю, что они в конечном итоге пользуются одними и теми же DLL, т.е. API тот же, откуда же такое ограничение? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2006, 10:53 |
|
Crystal Reports + db login
|
|||
---|---|---|---|
#18+
Прошу внимания к этой теме.. Складывается ощущение, что имя файла - это часть коннекта, хотя в коде - имя файла - это TCrpe.ReportName, а не (TCrpe.Connect.ReportName)... Но даже в случае написания TCrpe.ReportName := ..... после TCrpe.Connect.DataBase := , ServerName := и так далее - уже получаем ошибку 536 - недостаточно параметров или они некорректны.. Так все-таки есть какой-то метод использования одной конекции? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2006, 13:08 |
|
|
start [/forum/topic.php?fid=31&fpage=153&tid=1538841]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 415ms |
0 / 0 |