Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подружить PowerBuilder 8 c Cristal Reports / 14 сообщений из 14, страница 1 из 1
18.07.2008, 10:27
    #35438437
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Подскажите как использовать Cristal Reports в PowerBuilder наподобие того как он используется в Delphi и C++Builder ? Нужно из PowerBuilder создать отчет Cristal Reports и экспортировать его в формат Excel. Зараннее спасибо.
...
Рейтинг: 0 / 0
18.07.2008, 11:22
    #35438629
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
поиск еще никто не отменял: http://www.sql.ru/forum/actualtopics.aspx?search=crystal+reports&submit=%CD%E0%E9%F2%E8&bid=39]cr y stal reports
------------
С уважением, IKAR

IkarHomeCenter ........ Детский Дворик ........ ГавГав.Инфо
Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
18.07.2008, 14:28
    #35439471
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Спасибо за ссылки.
Обьявил определения глобальных функций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PUBLIC function long PEOpenEngine() library "crpe32.dll" alias for "PEOpenEngine"
PUBLIC function long PEOpenPrintJob(string as_file) library "crpe32.dll" alias for "PEOpenPrintJob"
PUBLIC function long PEOutputToWindow(long al_job, string as_caption, long al_1, long al_2, long al_3, long al_4, long al_5, long al_6) library "crpe32.dll" alias for "PEOutputToWindow"
PUBLIC function long PEOutputToPrinter(long al_job, long al_copy) library "crpe32.dll" alias for "PEOutputToPrinter"
PUBLIC function long PEStartPrintJob(long al_job, long al_wait) library "crpe32.dll" alias for "PEStartPrintJob"
PUBLIC function long PEClosePrintJob(long al_job) library "crpe32.dll" alias for "PEClosePrintJob"
PUBLIC function long PECloseEngine() library "crpe32.dll" alias for "PECloseEngine()"
Файл crpe32.dll скопировал в папку C:\Windows\System32.
В событии Activate формы пишу код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
///
///
long ll_engine, ll_job, ll_output, ll_print
string ls_report
///
ll_engine = PEOpenEngine()
if ll_engine =  0  then
	MessageBox ("Error", "Engine")
end if
ls_report = "d:\andrey\testreport.rpt"
ll_job = PEOpenPrintJob(ls_report)
if ll_job =  0  then
	MessageBox ("Error", "Job")
end if
ll_output = PEOutputToWindow(ll_job, "test",  30 ,  30 ,  200 ,  200 ,  0 ,  0 )
if ll_output =  0  then
	MessageBox("Error", "OutputToWindow")
end if
ll_print = PEStartPrintJob(ll_job,  1 )
if ll_print =  0  then
	MessageBox("Error", "StartPrintJob")
end if
PEClosePrintJob(ll_job)
PECloseEngine()
Файл отчета находится в "d:\andrey\testreport.rpt".
Вываливается ошибка, указывающая на вызов функции PEOpenEngine().
Что неправильно ? Подскажите !
...
Рейтинг: 0 / 0
18.07.2008, 14:43
    #35439520
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Хотя я с crystal reports не работал, но это не по той же причине? Тынц .
И еще, зачем это загонять в событие activate?
...
Рейтинг: 0 / 0
18.07.2008, 15:12
    #35439628
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Прочитал по ссылке, нет, причина другая. У меня кристал 12-ой версии.
...
Рейтинг: 0 / 0
18.07.2008, 16:21
    #35439917
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Узнавая откуда берется ошибка, сделал следующее:
1) обьявил функцию:
Код: plaintext
1.
PUBLIC function boolean MessBox(string capt, string mess) library "user32.dll" alias for "MessageBoxA"
2) в событии активации окна вызываю ее:
Код: plaintext
1.
MessBox('hello','hello');
Естественно это вызывает ошибку, она указана в прикрепленном файле.
Как видите, ошибки разные...
Что же это может быть ?
...
Рейтинг: 0 / 0
18.07.2008, 16:46
    #35440006
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Первым делом перенеси все это хотя бы в open
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
18.07.2008, 17:29
    #35440123
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
к spas2001: событие open возникает еще раньше события activate. Без разницы откуда будет вызываться этот код.
...
Рейтинг: 0 / 0
18.07.2008, 18:01
    #35440208
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Это да, но activate возникает каждый раз как окно получает фокус
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
18.07.2008, 18:06
    #35440215
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Код: plaintext
1.
FUNCTION boolean CharToOemA(ref string lpSrc, ref string lpDst) library "user32.dll"
Function uint GetSystemDirectory (ref string lpBuffer, uint uSize) Library "KERNEL32.DLL" Alias for "GetSystemDirectoryA"
и ведь работает зараза, может все-таки объявлено не так?
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
18.07.2008, 18:24
    #35440237
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Вот это проверил, работает:
Function uint GetSystemDirectory (ref string lpBuffer, uint uSize) Library "KERNEL32.DLL" Alias for "GetSystemDirectoryA"
Значит что то не так с типом результата функции PEOpenEngine... Может там нне целый тип... Хотя я уже пробовал просто вызывать эту функцию не присваивая ее результват переменной - та же самая ошибка...(((
...
Рейтинг: 0 / 0
18.07.2008, 23:33
    #35440474
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Чтобы не гадать, возьмите утилиту dumpbin.exe из Visual Studio и посмотрите экспортируется ли функция PEOpenEngine() из crpe32.dll
Что-то типа
Код: plaintext
dumpbin.exe /exports crpe32.dll
Можно и в обычном текстовом редакторе определить конечно это, если немного значть что к чему.
...
Рейтинг: 0 / 0
22.07.2008, 17:30
    #35445376
lioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Получилось экспортировать функции из crpe32.dll.
Обьявления функций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PUBLIC function long PEOpenEngine(long ll_engine) library "crpe32.dll" alias for "PEOpenEngine"
PUBLIC function long PEOpenPrintJob(string as_file) library "crpe32.dll" alias for "PEOpenPrintJob"
PUBLIC function long PEOutputToWindow(long al_job, string as_caption, long al_1, long al_2, long al_3, long al_4, long al_5, long al_6) library "crpe32.dll" alias for "PEOutputToWindow"
PUBLIC function long PEOutputToPrinter(long al_job, long al_copy) library "crpe32.dll" alias for "PEOutputToPrinter"
PUBLIC function long PEStartPrintJob(long al_job, long al_wait) library "crpe32.dll" alias for "PEStartPrintJob"
PUBLIC function long PEClosePrintJob(long al_job) library "crpe32.dll" alias for "PEClosePrintJob"
PUBLIC function long PECloseEngine() library "crpe32.dll" alias for "PECloseEngine()"
Код, выполняющийся по клику на кнопке "Показать отчет":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
long ll_engine, ll_job, ll_output, ll_print
string ls_report
ll_engine = PEOpenEngine(ll_engine)
if ll_engine =  0  then
	MessageBox ("Error", "Engine error")
else
	MessageBox ("Ok", "Engine start")
end if
ls_report = GetCurrentDirectory()+"\test.rpt"
ll_job = PEOpenPrintJob(ls_report)
if ll_job =  0  then
	MessageBox ("Error", "Job error")
else
	MessageBox ("Ok", "Job start")
end if
ll_output = PEOutputToWindow(ll_job, "Îò÷åò",  30 ,  30 ,  200 ,  200 ,  0 ,  0 )
if ll_output =  0  then
	MessageBox("Error", "OutputToWindow")
else
	MessageBox ("Ok", "OutputToWindow")
end if
ll_print = PEStartPrintJob(ll_job,  1 )
if ll_print =  0  then
	MessageBox("Error", "StartPrintJob")
else
	MessageBox("Ok", "StartPrintJob")
end if
PEClosePrintJob(ll_job)
PECloseEngine()
В результате выполнения этого кода:
1) Engine Start - OK
2) Job Start - OK
3) OutputToWindow - Error
4) StartPrintJob - Error
5) PowerBuilder Application Execution Error (R0015) - Application terminated. Error: Error calling external function PECloseEngine()

Перед OutputToWindow нужно заполнить некую структуру инфой о подключении к БД.

Нашел такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
logoninfo li
li.size =  514 
li.servername = 	SQLCA.ServerName + char( 0 )
li.databasename = SQLCA.Database + char( 0 )
li.userid = 	SQLCA.LogId + char( 0 )
li.password = 	SQLCA.LogPass + char( 0 )
rcode = PELogOnServer("P2SSQL.DLL" + char( 0 ), li)
if rcode =  0  then
  messagebox ("Ошибка!", "Не могу соедениться с БД.")
else
end if
int ntables
int i
ntables = PEGetNTables(job)
for i =  0  to ntables -  1 
 PESetNthTableLogOnInfo(job,i,li,True)
next
... далее следует вызов PEOutputToWindow()
Подскажите как мне обьявить эту структуру ? Я так понимаю она должна экспортироваться из crpe32.dll как и другие функции. Помогите !
...
Рейтинг: 0 / 0
22.07.2008, 18:11
    #35445501
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подружить PowerBuilder 8 c Cristal Reports
Ничего она никому не должна. Ищите в документации/примерах к Cristal Reports описание данной структуры, и опишите точно такую же структуру на PB, информация о соответствии типов не раз была на этом форуме.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подружить PowerBuilder 8 c Cristal Reports / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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