ASP proporciona buenos objetos integrados para operaciones de bases de datos. Sin embargo, faltan otras funciones, como la impresión de informes. Los informes nacionales especialmente complejos son difíciles de implementar utilizando ASP.
Sin embargo, ASP admite complementos, por lo que puede desarrollar complementos ASP según sea necesario. El autor utilizó Delphi5.0 para desarrollar el componente de impresión ASP. A continuación, el autor desarrollará paso a paso un componente ASP común para la impresión de informes.
El primer paso: crear una nueva biblioteca Activex, denominada PRintT, y luego crear una nueva clase de objeto Active Server, denominada Print, es decir, se crea un componente ASP denominado Print y el archivo se denomina Unit1.pas.
Paso 2: abra la biblioteca de tipos y cree un nuevo método Print1 para transferir la impresión de informes.
Paso 3: Cree un nuevo DataModule y coloque el componente Adoconnection y el componente AdoTable. El nombre del archivo es Unit2.pas.
Paso 4: cree un nuevo TQuickRep y diseñe el informe que desea imprimir. El nombre del archivo es Unit23.pas. El siguiente es el código detallado del archivo:
{=============Unidad1.pas================}
unidad Unidad1;
interfaz
usos
ComObj, ActiveX, AspTlb, PrintT_TLB, StdVcl;
tipo
TPrint = clase(TASPObject, iprint)
protegido
procedimiento OnEndPage; llamada segura;
procedimiento OnStartPage (const AScriptingContext: IUnknown llamada segura);
procedimiento Imprimir1; llamada segura;
fin;
implementación
utiliza ComServ, unidad2, unidad23;
procedimiento TPrint.OnEndPage;
comenzar
heredadoOnEndPage;
fin;
procedimiento TPrint.OnStartPage(const AScriptingContext: IUnknown);
comenzar
OnStartPage heredado (AScriptingContext);
fin;
procedimiento TPrint.Print1;
comenzar
IdearRpt.Imprimir;
fin;
inicialización
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstancia, tmApartamento);
fin.
{===============Unidad2.pas================}
unidad Unidad2;
interfaz
usos
SysUtils, Windows, Mensajes, Clases, Gráficos, Controles, Formularios,
Diálogos, DBTables, DB, ADODB;
tipo
TCustomerData = clase(TDataModule)
ADOConexión1: TADOConexión;
ADOTable1: TADOTable;
Fuente de datos1: 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;
ADOTable1IMAGEN: TBlobField;
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
var
Datos del cliente: TDatos del cliente;
implementación
{$R *.DFM}
fin.
{===========Unidad23.pas================}
unidad Unidad23;
interfaz
utiliza Windows, SysUtils, mensajes, clases, gráficos, controles,
StdCtrls, ExtCtrls, Formularios, Quickrpt, QRCtrls;
tipo
TIdearRpt = clase(TQuickRep)
PageFooterBand1: TQRBand;
PageHeaderBand1: TQRBand;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRDBText15: TQRDBText;
QRDBText17: TQRDBText;
QRDBText19: TQRDBText;
QRDBText13: TQRDBText;
QRLabel46: TQRLabel;
QRLabel47: TQRLabel;
TítuloBanda1: 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;
privado
público
fin;
var
IdearRpt: TIdearRpt;
implementación
utiliza unidad2;
{$R *.DFM}
fin.
{==========ImprimirT.dpr============}
biblioteca PrintT;
{%Archivo 'Imprimir.asp'}
usos
servicio de comunicaciones,
ImprimirT_TLB en 'ImprimirT_TLB.pas',
Unidad1 en 'Unidad1.pas' {Imprimir: CoClass},
Unidad2 en 'Unidad2.pas' {CustomerData: TDataModule},
Unidad23 en 'Unidad23.pas' {IdearRpt: TQuickRep};
exportaciones
DllGetClassObjeto,
DllCanDescargar ahora,
servidor dllregister,
DllUnregisterServer;
{$R *.TLB}
{$R*.RES}
comenzar
IdearRpt := TIdearRPt.Create(NiL);{esencial}
fin.
Paso 5: Compile y registre el componente PrintT, que se puede llamar en el código ASP. El ejemplo de llamada es el siguiente:
<% Establecer DelphiASPObj = Server.CreateObject("PrintT.Print")
DelphiASPOBj.Imprimir1
%>
A través de los pasos anteriores, hemos desarrollado con éxito un componente ASP con función de generación de informes utilizando Delphi. Por supuesto, el autor acaba de presentar una idea sencilla, con la esperanza de que sirva como punto de partida.