Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.102.239] |
|
Сообщ.
#1
,
|
|
|
Заранее прошу извинения, поскольку в FastReport еще не специалист. Но довольно-таки сложный отчет сделала. А вот на программном подключении отчета через Builder споткнулась. Хотя прошерстила все справки по FR: там почему-то все одно и то же и очень сжато.
Во-первых, не смогла понять, подключение делается через переменную или в самом коде отчета? Пыталась просто в коде FR явно прописать путь к БД, чтобы понять принцип подключения. uses frxIBXComponents var IBX_BD: TfrxIBXDatabase; procedure FR_CatOnStartReport(Sender: TfrxComponent); begin IBX_BD.DatabaseName := 'D:\BUILDER\BD.GDB'; IBX_BD.Connected :=true; end; Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses. Отключаю эту строку, пишет, что не определен компонент IBX_BD. Но я же его объявляю? Если через переменную в FR, то как ее связать со строкой подключения? В общем, пока у меня "темный лес". Естественно, БД подключила в самом компоненте отчета TfrxIBXDatabase IBX_BD. Но на другом компьютере путь нужно менять. Не красиво как-то это... Помогите, пожалуйста! Уже несколько дней сижу безрезультатно. |
Сообщ.
#2
,
|
|
|
Насчёт FR не скажу. Для Rave Reports в него подсовывается результат запроса, но никак не коннект на БД. ИМХО - в твоём случае должно быть то же самое. Любой Репорт - это всего-навсего аналог DBGrid.
ЗЫ - пишешь про Билдер, а код - на паскале . |
Сообщ.
#3
,
|
|
|
В компонент frxIBXDatabase DataSet не засунешь. Там такого свойства нет
Пока крутится мысль через Find Object, но еще не знаю, как реализовать. Странно, что никто не отвечает: или это неприличный вопрос? - хотя репорты имеют свои отличия от работы в Билдере... Думаю, что то, что я прочитала за это время о работе в FR, еще не сложилось "в одной ячейке". |
Сообщ.
#4
,
|
|
|
Цитата laifik @ Заранее прошу извинения, поскольку в FastReport еще не специалист. Но довольно-таки сложный отчет сделала. А вот на программном подключении отчета через Builder споткнулась. Хотя прошерстила все справки по FR: там почему-то все одно и то же и очень сжато. Во-первых, не смогла понять, подключение делается через переменную или в самом коде отчета? Пыталась просто в коде FR явно прописать путь к БД, чтобы понять принцип подключения. uses frxIBXComponents var IBX_BD: TfrxIBXDatabase; procedure FR_CatOnStartReport(Sender: TfrxComponent); begin IBX_BD.DatabaseName := 'D:\BUILDER\BD.GDB'; IBX_BD.Connected :=true; end; Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses. Отключаю эту строку, пишет, что не определен компонент IBX_BD. Но я же его объявляю? Если через переменную в FR, то как ее связать со строкой подключения? В общем, пока у меня "темный лес". Естественно, БД подключила в самом компоненте отчета TfrxIBXDatabase IBX_BD. Но на другом компьютере путь нужно менять. Не красиво как-то это... Помогите, пожалуйста! Уже несколько дней сижу безрезультатно. Это не коммерческий код вот и не компелируецца. Используйте компелятор до 2006 года выпуска, они ещё не умеют распознавать коммерческий код. |
Сообщ.
#5
,
|
|
|
Цитата laifik @ Но на другом компьютере путь нужно менять. Не красиво как-то это... Можно путь держать в .ini файле или в реестре. |
Сообщ.
#6
,
|
|
|
А можно и так - я все-таки права была насчет FindObject!
Мой очень умный друг и программист написал код на Делфи. Я лишь перевела на язык Си. Может этот код еще кому-нибудь понадобится... SetRptConnectionString(FR, “IBX_CON”, IBCONNECT->DatabaseName); FR->ShowReport(); .cpp //------------------------- Void SetRptConnectionString(TfrxReport *rpt, AnsiString DBName, AnsiString ConnStr) //функция динамического подключения к БД { TfrxIBXDatabase *db = dynamic_cast < TfrxIBXDatabase *> (prt->FindObject(DBName)); If (db != NULL) { If(db->Connected == true) db->Connected = false; db->DatabaseName = ConnStr; } } //------------------------ .h public: //User declarations SetRptConnectionString(TfrxReport *rpt, AnsiString DBName, AnsiString ConnStr); Может вылезти такая ошибка: Unresolved external ‘TForm1:: SetRptConnectionString(Frxclass::FrxReport*, System AnsiString’ referenced from ‘D\Form1.obj’ Нужно просто правильно объявить функцию (найти место) SetRptConnectionString. FR- отчет FastReport; IBX_CON - название компонента TfrxIBXDatabase в отчете; IBCONNECT - название компонента TIBDatabase в программе Builder Большое спасибо, что пытались помочь. Мысли потекли в правильном направлении. Через ini, конечно, можно. Но все равно нужен был для подключения этот код. |
Сообщ.
#7
,
|
|
|
Цитата laifik @ А можно и так - я все-таки права была насчет FindObject! Мой очень умный друг и программист написал код на Делфи. Я лишь перевела на язык Си. Может этот код еще кому-нибудь понадобится... Спасибо, пригодилось! На Delphi сделал так: 1. frxReport1 - вкладка Data - Свойства: IBXDatabase1.DatabaseName := ''; IBXDatabase1.Connected := false; 2. Положил на форму рядом с frxReport1 компонент frxIBXComponents1 3. В событии OnCreate формы добавил код: (frxReport1.FindComponent('IBXDatabase1') as TfrxIBXDatabase).DatabaseName := MyDatabaseName; (frxReport1.FindComponent('IBXDatabase1') as TfrxIBXDatabase).Connected := true; Всё работает. P.S. У меня FastReport 5.0 |
Сообщ.
#8
,
|
|
|
Цитата laifik @ Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses Элементарно, просто пропущена точка с запятой в конце этой строки. Цитата skrambun @ Это не коммерческий код вот и не компелируецца. бред. |