ASP는 데이터베이스 작업에 적합한 내장 개체를 제공합니다. 하지만 보고서 인쇄 등 다른 기능은 부족합니다. 특히 복잡한 국내 보고서는 ASP를 사용하여 구현하기가 어렵습니다.
그러나 ASP는 플러그인을 지원하므로 필요에 따라 ASP 플러그인을 개발할 수 있습니다. 저자는 Delphi5.0을 사용하여 ASP 인쇄 구성 요소를 개발했습니다. 다음으로 저자는 보고서 인쇄를 위한 공통 ASP 구성 요소를 단계별로 개발합니다.
첫 번째 단계: PRintT라는 새 Activex 라이브러리를 만든 다음 Print라는 새 Active Server 개체 클래스를 만듭니다. 즉, Print라는 ASP 구성 요소가 만들어지고 파일 이름은 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;
시작하다
IdeaRpt.Print;
끝;
초기화
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstance, tmApartment);
끝.
{===============Unit2.pas===============}
유닛 유닛2;
인터페이스
용도
SysUtils, Windows, 메시지, 클래스, 그래픽, 컨트롤, 양식,
대화 상자, DBTable, DB, ADODB;
유형
TCustomerData = 클래스(TDataModule)
ADOConnection1: TADOConnection;
ADOTable1: TADO테이블;
데이터소스1: TDataSource;
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: TBCD필드;
ADOTable1ZONGMJ1: TBCDField;
ADOTable1ZONGMJ2: TBCDField;
ADOTable1YOUXRQ1: TDateTimeField;
ADOTable1YOUXRQ2: TDateTimeField;
ADOTable1BEIZ: TStringField;
ADOTable1JINGB: TStringField;
ADOTable1SHENH: TStringField;
ADOTable1SHEND: TStringField;
ADOTable1SHENDRQ: TDateTimeField;
ADOTable1PICTURE: TBlobField;
사적인
{비공개 선언}
공공의
{공개 선언}
끝;
var
고객데이터: T고객데이터;
구현
{$R *.DFM}
끝.
{===========Unit23.pas================}
유닛 유닛23;
인터페이스
Windows, SysUtils, 메시지, 클래스, 그래픽, 컨트롤을 사용합니다.
StdCtrls, ExtCtrls, 양식, 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;
QR모양1: TQR모양;
QRShape2: TQR모양;
QRShape3: TQR모양;
QRShape4: TQR모양;
QRShape5: TQR모양;
QRShape6: TQR모양;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRLabel6: TQRLabel;
QRShape7: TQR모양;
QRShape8: TQR모양;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
QRDB텍스트1: TQRDB텍스트;
QRDBText2: TQRDBText;
QRDBText4: TQRDBText;
QRDBText6: TQRDBText;
QRDBText3: TQRDBText;
QRShape9: TQR모양;
QRLabel9: TQRLabel;
QRDBText5: TQRDBText;
QRShape17: TQR모양;
QRShape22: TQR모양;
QRShape23: TQR모양;
QRShape24: TQR모양;
QRShape25: TQR모양;
QRShape26: TQR모양;
QRShape27: TQR모양;
QRShape10: TQR모양;
QRShape11: TQR모양;
QRShape12: TQR모양;
QRShape13: TQR모양;
QRShape18: TQR모양;
QRShape19: TQR모양;
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: TQR모양;
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: TQR모양;
QRLabel62: TQRLabel;
QRLabel63: TQRLabel;
QRDBText7: TQRDBText;
QRDBText8: TQRDB텍스트;
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;
사적인
공공의
끝;
var
IdeaRpt: TIdearRpt;
구현
Unit2를 사용합니다.
{$R *.DFM}
끝.
{==========PrintT.dpr=============}
도서관 PrintT;
{%파일 'Print.asp'}
용도
ComServ,
'PrintT_TLB.pas'의 PrintT_TLB,
'Unit1.pas' {인쇄: CoClass}의 Unit1,
'Unit2.pas' {CustomerData: TDataModule}의 Unit2,
'Unit23.pas'의 Unit23 {IdearRpt: TQuickRep};
수출
DllGetClass객체,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
시작하다
IdearRpt := TIdearRPt.Create(NiL);{필수}
끝.
5단계: ASP 코드에서 호출할 수 있는 PrintT 구성 요소를 컴파일하고 등록합니다. 호출 예제는 다음과 같습니다.
<% Set DelphiASPOBj = Server.CreateObject("PrintT.Print")
델파이ASPOBj.Print1
%>
위의 과정을 거쳐 델파이를 이용하여 리포팅 기능을 갖춘 ASP 컴포넌트를 성공적으로 개발하였습니다. 물론 저자는 출발점이 되기를 바라면서 단순한 아이디어를 소개했을 뿐이다.