Движок Postgresdac для Fastreport 5
Для FastReport 4 (ошибка № версии в теме сообщения)
Итак, после долгих мучений я сделал движок!!!
Инструкция:
1. Устанавливаем FastReport
2. Устаналиваем PostgresDAC-компоненты
3. Заходим в папку Extra (она находится в папке установленного FastReport)
4. Делаем резервную копию папки Template
5. Удаляем все ненужные версии файлов в папке Template, если вашей версии IDE нет (также как и у меня), то я беру, например все файлы с номером 9 переименовую на 11. Удалять необязательно, просто для чистоты.
6. Файл dclfrxXXX11.bdsproj
- находим вхождение dclfrxXXX9.dpk и меняем на dclfrxXXX11.dpk
7. Файл dclfrxXXX11.dpk
- находим вхождение package dclfrxXXX9; и меняем на package dclfrxXXX11;
- находим вхождение {$DESCRIPTION 'FastReport 3.0 XXX Components'} и меняем на {$DESCRIPTION 'FastReport 4.0 XXX Components'}
- находим вхождение frxXXX9; и меняем на frxXXX11;
8. Файл frxXXX11.bdsproj
- находим вхождение frxXXX9.dpk и меняем на frxXXX11.dpk
9. Файл frxXXX11.dpk
- находим вхождение package frxXXX9; и меняем на package frxXXX11;
- находим вхождение PXXX90 и меняем на PXXX11, я так думаю 0 был обязателен, поэтому если у вас версия Delphi ниже 10, то ставить 70, 80, ...
- находим вхождение frx9 и меняем на frx11
- находим вхождение frxDB9 и меняем на frxDB11
- находим вхождение fs9 и меняем на fs11
- удаляем три строки (если оставить, то у меня компилируется с ошибкой)
{$IFDEF QBUILDER}
fqb90,
{$ENDIF}
10. Файл frxXXXComponents.pas
- находим вхождение FQuery.Database.GetTableNames(ATableList, ShowSystemTables);
и меняем на FQuery.Database.GetTableNames('', ShowSystemTables, ATableList);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXDataBase, nil, '', 'XXX', 0, 37);
и меняем на frxObjects.RegisterObject1(TfrxXXXDataBase, nil, '', {$IFDEF DB_CAT}'DATABASES'{$ELSE}''{$ENDIF}, 0, 37);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXTable, nil, '', 'XXX', 0, 38);
и меняем на frxObjects.RegisterObject1(TfrxXXXTable, nil, '', {$IFDEF DB_CAT}'TABLES'{$ELSE}''{$ENDIF}, 0, 38);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXQuery, nil, '', 'XXX', 0, 39);
и меняем на frxObjects.RegisterObject1(TfrxXXXQuery, nil, '', {$IFDEF DB_CAT}'QUERIES'{$ELSE}''{$ENDIF}, 0, 39);
- находим вхождение CatBmp.Free;
и меняем на //CatBmp.Free; (комментируем)
11. Файл frxXXXEditor.pas
- находим вхождение DataBase.GetTableNames(Values, False);
и меняем на DataBase.GetTableNames('', False, Values);
12. Файл frxXXXReg.pas
- находим вхождение RegisterComponents('FastReport 3.0', [TfrxXXXComponents]);
и меняем на RegisterComponents('FastReport 4.0', [TfrxXXXComponents]);
13. Запускаем Delphi
14. Открываем проект NewEngine.dpr
15. Для Tedit - AbbrE удаляем событие AbbrEExit, мешает в данном случае.
16. Запускаем программку NewEngine.
17. Заполняем TEdit сверху вниз:
- DAC
- TPSQLTable
- TPSQLQuery
- TPSQLDatabase
- PSQLDbTables
- PostgresDAC
- последние два на свое усмотрение
18. Кнопка ОК. Программа создала папку DAC в папке Extra). Закрываем проект, но не оболочку.
19. Копируем папку DAC в папку ..\FastReport\Source\
20. Добавляем путь к папке DAC в опциях: Tools->Options->Library - Win32->Library Path
21. Открываем в оболочке файл frxDAC11.dpk из папки DAC - компилируем (compile)
22. Открываем в оболочке файл dclfrxDAC11.dpk из папки DAC - компилируем (compile) и устанавливаем (install)
23. В разделе FastReport 4.0 видим новый компонент TfrxDACComponents
ВСЕ!!!
Проверка сделанного:
1. Кидаем на форму компоненты - TfrxReport, TfrxDACComponents, TPSQLDatabase
4. Выставляем TfrxDACComponents.DefaultDatabase := PSQLDatabase1
5. Правая кнопка на TfrxReport -> Edit report
6. На вкладке данные, в самом низу, видим три наших новых компонента - DAC Database, DAC Table, DAC Query
7. У компонентов DAC Table, DAC Query свойство Database := PSQLDatabase1
ч.т.д. :-)
P.S. ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ Stakler за наводку по пункту 10.2, 10.3, 10.4 (вот здесь я ничего изначально не трогал, поэтому компоненты не показывались в отчете во вкладке данные)
P.S.S. CatBmp.Free; для чего он - не знаю. Подскажите. Пошло только когда закомментировал.
P.S.S.S. Цифры (последний параметр) в frxObjects.RegisterObject1 - (37, 38, 39) по словам Stakler обозначают номер иконки для компонента. Только где взять полный список иконок и как добавить свои - не знаю.
Итак, после долгих мучений я сделал движок!!!
Инструкция:
1. Устанавливаем FastReport
2. Устаналиваем PostgresDAC-компоненты
3. Заходим в папку Extra (она находится в папке установленного FastReport)
4. Делаем резервную копию папки Template
5. Удаляем все ненужные версии файлов в папке Template, если вашей версии IDE нет (также как и у меня), то я беру, например все файлы с номером 9 переименовую на 11. Удалять необязательно, просто для чистоты.
6. Файл dclfrxXXX11.bdsproj
- находим вхождение dclfrxXXX9.dpk и меняем на dclfrxXXX11.dpk
7. Файл dclfrxXXX11.dpk
- находим вхождение package dclfrxXXX9; и меняем на package dclfrxXXX11;
- находим вхождение {$DESCRIPTION 'FastReport 3.0 XXX Components'} и меняем на {$DESCRIPTION 'FastReport 4.0 XXX Components'}
- находим вхождение frxXXX9; и меняем на frxXXX11;
8. Файл frxXXX11.bdsproj
- находим вхождение frxXXX9.dpk и меняем на frxXXX11.dpk
9. Файл frxXXX11.dpk
- находим вхождение package frxXXX9; и меняем на package frxXXX11;
- находим вхождение PXXX90 и меняем на PXXX11, я так думаю 0 был обязателен, поэтому если у вас версия Delphi ниже 10, то ставить 70, 80, ...
- находим вхождение frx9 и меняем на frx11
- находим вхождение frxDB9 и меняем на frxDB11
- находим вхождение fs9 и меняем на fs11
- удаляем три строки (если оставить, то у меня компилируется с ошибкой)
{$IFDEF QBUILDER}
fqb90,
{$ENDIF}
10. Файл frxXXXComponents.pas
- находим вхождение FQuery.Database.GetTableNames(ATableList, ShowSystemTables);
и меняем на FQuery.Database.GetTableNames('', ShowSystemTables, ATableList);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXDataBase, nil, '', 'XXX', 0, 37);
и меняем на frxObjects.RegisterObject1(TfrxXXXDataBase, nil, '', {$IFDEF DB_CAT}'DATABASES'{$ELSE}''{$ENDIF}, 0, 37);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXTable, nil, '', 'XXX', 0, 38);
и меняем на frxObjects.RegisterObject1(TfrxXXXTable, nil, '', {$IFDEF DB_CAT}'TABLES'{$ELSE}''{$ENDIF}, 0, 38);
- находим вхождение frxObjects.RegisterObject1(TfrxXXXQuery, nil, '', 'XXX', 0, 39);
и меняем на frxObjects.RegisterObject1(TfrxXXXQuery, nil, '', {$IFDEF DB_CAT}'QUERIES'{$ELSE}''{$ENDIF}, 0, 39);
- находим вхождение CatBmp.Free;
и меняем на //CatBmp.Free; (комментируем)
11. Файл frxXXXEditor.pas
- находим вхождение DataBase.GetTableNames(Values, False);
и меняем на DataBase.GetTableNames('', False, Values);
12. Файл frxXXXReg.pas
- находим вхождение RegisterComponents('FastReport 3.0', [TfrxXXXComponents]);
и меняем на RegisterComponents('FastReport 4.0', [TfrxXXXComponents]);
13. Запускаем Delphi
14. Открываем проект NewEngine.dpr
15. Для Tedit - AbbrE удаляем событие AbbrEExit, мешает в данном случае.
16. Запускаем программку NewEngine.
17. Заполняем TEdit сверху вниз:
- DAC
- TPSQLTable
- TPSQLQuery
- TPSQLDatabase
- PSQLDbTables
- PostgresDAC
- последние два на свое усмотрение
18. Кнопка ОК. Программа создала папку DAC в папке Extra). Закрываем проект, но не оболочку.
19. Копируем папку DAC в папку ..\FastReport\Source\
20. Добавляем путь к папке DAC в опциях: Tools->Options->Library - Win32->Library Path
21. Открываем в оболочке файл frxDAC11.dpk из папки DAC - компилируем (compile)
22. Открываем в оболочке файл dclfrxDAC11.dpk из папки DAC - компилируем (compile) и устанавливаем (install)
23. В разделе FastReport 4.0 видим новый компонент TfrxDACComponents
ВСЕ!!!
Проверка сделанного:
1. Кидаем на форму компоненты - TfrxReport, TfrxDACComponents, TPSQLDatabase
4. Выставляем TfrxDACComponents.DefaultDatabase := PSQLDatabase1
5. Правая кнопка на TfrxReport -> Edit report
6. На вкладке данные, в самом низу, видим три наших новых компонента - DAC Database, DAC Table, DAC Query
7. У компонентов DAC Table, DAC Query свойство Database := PSQLDatabase1
ч.т.д. :-)
P.S. ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ Stakler за наводку по пункту 10.2, 10.3, 10.4 (вот здесь я ничего изначально не трогал, поэтому компоненты не показывались в отчете во вкладке данные)
P.S.S. CatBmp.Free; для чего он - не знаю. Подскажите. Пошло только когда закомментировал.
P.S.S.S. Цифры (последний параметр) в frxObjects.RegisterObject1 - (37, 38, 39) по словам Stakler обозначают номер иконки для компонента. Только где взять полный список иконок и как добавить свои - не знаю.
Комментарии
Пример как это делается можешь посмотреть в моих движках для FR (см. сайт в подписи).
Спасибо! Попробую!