用Delphi开发报表打印的ASP组件 
--------------------------------------------------------------------------------
作者:zdygis  来源:CSDN  类别:Delphi  日期:2001.08.31  今日/总浏览: 5/505  
     ASP在对数据库操作方面提供了很好的内嵌对象。但是,其他方面的功能有所欠缺,如:报表打印。特别是国内的复杂的报表,用ASP很难实现。   不过,ASP支持插件,这就可以根据需要开发ASP插件,笔者用Delphi5.0开发了ASP打印组件。下面笔者将分步来开发一个通用的报表打印的ASP组件。   第一步:新建一个Activex Library,命名为PrintT,然后再新建一个Active Server Object Class,命名为Print,即建立了一个名为Print的ASP组件,文件命名为Unit1.pas。  第二步:打开Type Library,新建一个方法Print1,用于传递报表打印。  第三步:新建一个DataModule,放入Adoconnection组件和AdoTable组件,文件名为Unit2.pas。  第四步:新建一个TQuickRep,设计你要打印的报表,文件名为文件名为Unit23.pas。以下是个文件的详细代码: 
{=============Unit1.pas===============} unit Unit1; interface uses 
ComObj, ActiveX, AspTlb, PrintT_TLB, StdVcl; type 
TPrint = class(TASPObject, IPrint) 
protected 
procedure OnEndPage; safecall; 
procedure OnStartPage(const AScriptingContext: IUnknown); safecall; 
procedure Print1; safecall; 
end; implementation uses ComServ,unit2,unit23; procedure TPrint.OnEndPage; 
begin 
inherited OnEndPage; 
end; procedure TPrint.OnStartPage(const AScriptingContext: IUnknown); 
begin 
inherited OnStartPage(AScriptingContext); 
end; procedure TPrint.Print1; 
begin 
 IdearRpt.Print; 
end; initialization 
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print, 
ciMultiInstance, tmApartment); 
end. {===============Unit2.pas===============} unit Unit2; interface uses 
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, 
Dialogs, DBTables, DB, ADODB; type 
TCustomerData = class(TDataModule) 
ADOConnection1: TADOConnection; 
ADOTable1: TADOTable; 
DataSource1: 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: TBCDField; 
ADOTable1ZONGMJ1: TBCDField; 
ADOTable1ZONGMJ2: TBCDField; 
ADOTable1YOUXRQ1: TDateTimeField; 
ADOTable1YOUXRQ2: TDateTimeField; 
ADOTable1BEIZ: TStringField; 
ADOTable1JINGB: TStringField; 
ADOTable1SHENH: TStringField; 
ADOTable1SHEND: TStringField; 
ADOTable1SHENDRQ: TDateTimeField; 
ADOTable1PICTURE: TBlobField; private 
{ Private declarations } 
public 
{ Public declarations } 
end; var 
CustomerData: TCustomerData; implementation {$R *.DFM} end. {===========Unit23.pas===============} unit Unit23; interface uses Windows, SysUtils, Messages, Classes, Graphics, Controls, 
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls; type 
TIdearRpt = class(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; 
private public end; var 
IdearRpt: TIdearRpt; implementation 
uses unit2; 
{$R *.DFM} end. {=========PrintT.dpr============} library PrintT; {%File 'Print.asp'} uses 
ComServ, 
PrintT_TLB in 'PrintT_TLB.pas', 
Unit1 in 'Unit1.pas' {Print: CoClass}, 
Unit2 in 'Unit2.pas' {CustomerData: TDataModule}, 
Unit23 in 'Unit23.pas' {IdearRpt: TQuickRep}; exports 
DllGetClassObject, 
DllCanUnloadNow, 
DllRegisterServer, 
DllUnregisterServer; {$R *.TLB} {$R *.RES} begin 
 IdearRpt := TIdearRPt.Create(NiL);{必不可少} 
end.  第五步:编译并注册PrintT组件,即可在ASP代码中调用,调用示例如下: 
<% Set DelphiASPObj = Server.CreateObject("PrintT.Print") 
DelphiASPObj.Print1 %> ------------------------
以上是别人的教程,我按他做了!
能够显示打印预览窗口,但是无法关闭,关闭时报无法定位预览窗口的父窗体
呵呵,我想跟那个 
IdearRpt := TIdearRPt.Create(NiL);{必不可少} 
有关系,于是把它放到onstartpage中然后在onendpage中释放
可还是报错!
试着改成IdearRpt := TIdearRPt.Create(self);
呵呵,报错列!看来在acitvex中没有父窗体,呵呵瞎猜的!
还请各位指点哦!