ASP bietet gute eingebettete Objekte für Datenbankoperationen. Allerdings fehlen andere Funktionen, wie zum Beispiel das Drucken von Berichten. Besonders komplexe Inlandsberichte lassen sich mit ASP nur schwer umsetzen.
ASP unterstützt jedoch Plug-Ins, sodass Sie ASP-Plug-Ins nach Bedarf entwickeln können. Der Autor hat die ASP-Druckkomponente mit Delphi5.0 entwickelt. Als nächstes wird der Autor Schritt für Schritt eine gemeinsame ASP-Komponente für den Berichtsdruck entwickeln.
Der erste Schritt: Erstellen Sie eine neue Activex-Bibliothek mit dem Namen PRintT und anschließend eine neue Active Server-Objektklasse mit dem Namen Print. Das heißt, es wird eine ASP-Komponente mit dem Namen Print erstellt und die Datei heißt Unit1.pas.
Schritt 2: Öffnen Sie die Typbibliothek und erstellen Sie eine neue Methode „Print1“, um den Berichtsdruck zu übertragen.
Schritt 3: Erstellen Sie ein neues DataModule und fügen Sie die Adoconnection-Komponente und die AdoTable-Komponente ein. Der Dateiname lautet Unit2.pas.
Schritt 4: Erstellen Sie ein neues TQuickRep und entwerfen Sie den Bericht, den Sie drucken möchten. Der Dateiname lautet Unit23.pas. Das Folgende ist der detaillierte Code der Datei:
{=============Unit1.pas===============}
Einheit Einheit1;
Schnittstelle
verwendet
ComObj, ActiveX, AspTlb, PrintT_TLB, StdVcl;
Typ
TPrint = class(TASPObject, iprint)
geschützt
Prozedur OnEndPage; Safecall;
procedure OnStartPage(const AScriptingContext: IUnknown);
Prozedur Print1; Safecall;
Ende;
Durchführung
verwendet ComServ,unit2,unit23;
Prozedur TPrint.OnEndPage;
beginnen
inheritedOnEndPage;
Ende;
procedure TPrint.OnStartPage(const AScriptingContext: IUnknown);
beginnen
geerbt OnStartPage(AScriptingContext);
Ende;
Prozedur TPrint.Print1;
beginnen
IdearRpt.Print;
Ende;
Initialisierung
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstance, tmApartment);
Ende.
{===============Unit2.pas===============}
Einheit Einheit2;
Schnittstelle
verwendet
SysUtils, Windows, Nachrichten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, DBTables, DB, ADODB;
Typ
TCustomerData = class(TDataModule)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
Datenquelle1: 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;
Privat
{Private Erklärungen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
Kundendaten: TCustomerData;
Durchführung
{$R *.DFM}
Ende.
{===========Unit23.pas===============}
Einheit Einheit23;
Schnittstelle
verwendet Windows, SysUtils, Nachrichten, Klassen, Grafiken, Steuerelemente,
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls;
Typ
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;
Privat
öffentlich
Ende;
var
IdearRpt: TIdearRpt;
Durchführung
verwendet Einheit2;
{$R *.DFM}
Ende.
{==========PrintT.dpr============}
Bibliothek PrintT;
{%File 'Print.asp'}
verwendet
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};
Exporte
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
beginnen
IdearRpt := TIdearRPt.Create(NiL);{essential}
Ende.
Schritt 5: Kompilieren und registrieren Sie die PrintT-Komponente, die im ASP-Code aufgerufen werden kann. Das Aufrufbeispiel lautet wie folgt:
<% Set DelphiASPObj = Server.CreateObject("PrintT.Print")
DelphiASPOBj.Print1
%>
Durch die oben genannten Schritte haben wir mit Delphi erfolgreich eine ASP-Komponente mit Berichtsfunktion entwickelt. Natürlich hat der Autor nur eine einfache Idee vorgestellt und hofft, als Ausgangspunkt zu dienen.