ASP предоставляет хорошие встроенные объекты для операций с базами данных. Однако другие функции отсутствуют, например, печать отчетов. Особо сложные внутренние отчеты сложно реализовать с помощью ASP.
Однако ASP поддерживает плагины, поэтому вы можете разрабатывать плагины ASP по мере необходимости. Автор разработал компонент печати ASP с использованием Delphi5.0. Далее автор шаг за шагом разработает общий компонент ASP для печати отчетов.
Первый шаг: создайте новую библиотеку Activex с именем PRintT, а затем создайте новый класс объектов Active Server с именем Print, то есть создается компонент ASP с именем Print и файл с именем Unit1.pas.
Шаг 2. Откройте библиотеку типов и создайте новый метод Print1 для передачи печати отчета.
Шаг 3. Создайте новый DataModule и поместите в него компонент Adoconnection и компонент AdoTable. Имя файла — Unit2.pas.
Шаг 4. Создайте новый TQuickRep и создайте отчет, который хотите распечатать. Имя файла — Unit23.pas. Ниже приведен подробный код файла:
{=============Unit1.pas===============}
блок Unit1;
интерфейс
использует
ComObj, ActiveX, AspTlb, PrintT_TLB, StdVcl;
тип
TPrint = класс (TASPObject, iprint)
защищенный
процедура OnEndPage;
процедура OnStartPage (const AScriptingContext: IUnknown);
процедура Print1;
конец;
выполнение
использует ComServ, unit2, unit23;
процедура TPrint.OnEndPage;
начинать
унаследованныйOnEndPage;
конец;
процедура TPrint.OnStartPage(const AScriptingContext: IUnknown);
начинать
унаследованный OnStartPage(AScriptingContext);
конец;
процедура TPrint.Print1;
начинать
ИдеарРпт.Печать;
конец;
инициализация
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstance, tmApartment);
конец.
{===============Unit2.pas===============}
блок Unit2;
интерфейс
использует
SysUtils, Windows, сообщения, классы, графика, элементы управления, формы,
Диалоги, DBTables, БД, ADODB;
тип
TCustomerData = класс (TDataModule)
АДОСоединение1: ТАДОСоединение;
ADOTable1: TADOTable;
Источник данных1: ТDataSource;
ADOTable1NIANH: TStringField;
ADOTable1XUH: TStringField;
ADOTable1SHENQDW: TStringField;
ADOTable1SHENQRQ: TDateTimeField;
ADOTable1FARDB: TStringField;
ADOTable1FARDH: TStringField;
ADOTable1LIANXR: TStringField;
ADOTable1LIANXRDH: TStringField;
ADOTable1DANWZCDZ: TStringField;
ADOTable1JIANSXZDM: TStringField;
ADOTable1JIANSGM: TBCDField;
ADOTable1ZHIGRS: TBCDField;
ADOTable1YONGDFH: TBCDField;
ADOTable1RIYSL: TBCDField;
ADOTable1RIPSL: TBCDField;
ADOTable1JIANZSJGD:TBCDField;
ADOTable1RANQYL: TBCDField;
ADOTable1YONGDYQ: TStringField;
ADOTable1RELYL: TBCDField;
ADOTable1JIANSXM: TStringField;
ADOTable1PIZWH: TStringField;
ADOTable1JIANSGM2: TBCDField;
ADOTable1YONGDXZDM: TStringField;
ADOTable1YONGDWZ: TStringField;
ADOTable1DONGL: TStringField;
ADOTable1XIL: TStringField;
ADOTable1NANL: TStringField;
ADOTable1BEIL: TStringField;
ADOTable1CHANG: TBCDField;
ADOTable1KUAN: TBCDField;
ADOTable1ZONGMJ1: TBCDField;
ADOTable1ZONGMJ2: TBCDField;
ADOTable1YOUXRQ1: TDateTimeField;
ADOTable1YOUXRQ2: TDateTimeField;
ADOTable1BEIZ: TStringField;
ADOTable1JINGB: TStringField;
ADOTable1SHENH: TStringField;
ADOTable1SHEND: TStringField;
ADOTable1SHENDRQ: TDateTimeField;
ADOTable1PICTURE: TBlobField;
частный
{Частные заявления}
общественный
{Публичные заявления}
конец;
вар
Данные клиента: TCustomerData;
выполнение
{$R *.DFM}
конец.
{===========Unit23.pas===============}
блок Unit23;
интерфейс
использует Windows, SysUtils, сообщения, классы, графику, элементы управления,
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls;
тип
TIdearRpt = класс (TQuickRep)
PageFooterBand1: TQRBand;
PageHeaderBand1: TQRBand;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRDBText15: TQRDBText;
QRDBText17: TQRDBText;
QRDBText19: TQRDBText;
QRDBText13: TQRDBText;
QRLabel46: TQRLabel;
QRLabel47: TQRLabel;
TitleBand1: TQRBand;
QRShape1: TQRShape;
QRShape2: TQRShape;
QRShape3: TQRShape;
QRShape4: TQRShape;
QRShape5: TQRShape;
QRShape6: TQRShape;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRLabel6: TQRLabel;
QRShape7: TQRShape;
QRShape8: TQRShape;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText4: TQRDBText;
QRDBText6: TQRDBText;
QRDBText3: TQRDBText;
QRShape9: TQRShape;
QRLabel9: TQRLabel;
QRDBText5: TQRDBText;
QRShape17: TQRShape;
QRShape22: TQRShape;
QRShape23: TQRShape;
QRShape24: TQRShape;
QRShape25: TQRShape;
QRShape26: TQRShape;
QRShape27: TQRShape;
QRShape10: TQRShape;
QRShape11: TQRShape;
QRShape12: TQRShape;
QRShape13: TQRShape;
QRShape18: TQRShape;
QRShape19: TQRShape;
QRLabel10: TQRLabel;
QRLabel13: TQRLabel;
QRLabel14: TQRLabel;
QRLabel15: TQRLabel;
QRLabel16: TQRLabel;
QRLabel17: TQRLabel;
QRLabel18: TQRLabel;
QRLabel19: TQRLabel;
QRLabel20: TQRLabel;
QRLabel21: TQRLabel;
QRLabel22: TQRLabel;
QRLabel23: TQRLabel;
QRLabel24: TQRLabel;
QRLabel32: TQRLabel;
QRLabel33: TQRLabel;
QRLabel34: TQRLabel;
QRLabel35: TQRLabel;
QRLabel36: TQRLabel;
QRShape20: TQRShape;
QRLabel37: TQRLabel;
QRLabel38: TQRLabel;
QRLabel41: TQRLabel;
QRLabel42: TQRLabel;
QRLabel43: TQRLabel;
QRLabel44: TQRLabel;
QRLabel45: TQRLabel;
QRLabel48: TQRLabel;
QRLabel49: TQRLabel;
QRLabel50: TQRLabel;
QRLabel51: TQRLabel;
QRLabel52: TQRLabel;
QRLabel53: TQRLabel;
QRLabel54: TQRLabel;
QRLabel55: TQRLabel;
QRLabel56: TQRLabel;
QRLabel57: TQRLabel;
QRLabel58: TQRLabel;
QRLabel59: TQRLabel;
QRLabel60: TQRLabel;
QRLabel61: TQRLabel;
QRShape28: TQRShape;
QRLabel62: TQRLabel;
QRLabel63: TQRLabel;
QRDBText7: TQRDBText;
QRDBText8: TQRDBText;
QRDBText9: TQRDBText;
QRDBText10: TQRDBText;
QRDBText11: TQRDBText;
QRDBText12: TQRDBText;
QRDBText14: TQRDBText;
QRDBText16: TQRDBText;
QRDBText18: TQRDBText;
QRDBText20: TQRDBText;
QRDBText21: TQRDBText;
QRDBText22: TQRDBText;
QRDBText23: TQRDBText;
QRDBText24: TQRDBText;
QRDBText25: TQRDBText;
QRDBText26: TQRDBText;
QRDBText27: TQRDBText;
QRDBText28: TQRDBText;
QRDBText29: TQRDBText;
QRDBText30: TQRDBText;
QRDBText31: TQRDBText;
QRDBText32: TQRDBText;
QRDBText33: TQRDBText;
QRDBText34: TQRDBText;
QRDBText35: TQRDBText;
QRMemo4: TQRMemo;
QRDBText36: TQRDBText;
QRDBText37: TQRDBText;
QRDBText38: TQRDBText;
частный
общественный
конец;
вар
ИдеарРпт: ТИдерРпт;
выполнение
использует unit2;
{$R *.DFM}
конец.
{==========PrintT.dpr============}
библиотека ПринтТ;
{%Файл 'Print.asp'}
использует
КомСерв,
PrintT_TLB в «PrintT_TLB.pas»,
Unit1 в 'Unit1.pas' {Print: CoClass},
Unit2 в «Unit2.pas» {CustomerData: TDataModule},
Unit23 в «Unit23.pas» {IdearRpt: TQuickRep};
экспорт
Длллжетклассобжект,
DllCanUnloadNow,
ДлРегистерСервер,
Дллунрегистерсервер;
{$R *.TLB}
{$R *.RES}
начинать
IdearRpt := TIdearRPt.Create(NiL);{существенный}
конец.
Шаг 5. Скомпилируйте и зарегистрируйте компонент PrintT, который можно вызывать в коде ASP. Пример вызова следующий:
<% Set DelphiASPObj = Server.CreateObject("PrintT.Print")
DelphiASPOBj.Print1
%>
Благодаря описанным выше шагам мы успешно разработали компонент ASP с функцией отчетности с использованием Delphi. Конечно, автор просто представил простую идею, надеясь послужить отправной точкой.