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===============}
ユニットユニット1;
インタフェース
用途
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;
始める
IdearRpt.Print;
終わり;
初期化
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstance、tmApartment);
終わり。
{===============Unit2.pas===============}
ユニットユニット2;
インタフェース
用途
SysUtils、Windows、メッセージ、クラス、グラフィックス、コントロール、フォーム、
ダイアログ、DBTable、DB、ADODB;
タイプ
TCustomerData = クラス(TDataModule)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
データソース 1: TDataSource;
ADOTable1NIIANH: TStringField;
ADOTable1XUH: TStringField;
ADOTable1SHENQDW: TStringField;
ADOTable1SHENQRQ: TDateTimeフィールド;
ADOTable1FARDB: TStringField;
ADOTable1FARDH: TStringField;
ADOTable1LIANXR: TStringField;
ADOTable1LIANXRDH: TStringField;
ADOTable1DANWZCDZ: TStringField;
ADOTable1JIANSXZDM: TStringField;
ADOTable1JIANSGM:TBCDフィールド;
ADOTable1ZHIGRS:TBCDフィールド;
ADOTable1YONGDFH:TBCDフィールド;
ADOTable1RIYSL:TBCDフィールド;
ADOTable1RIPSL:TBCDフィールド;
ADOTable1JIANZSJGD:TBCDフィールド;
ADOTable1RANQYL:TBCDフィールド;
ADOTable1YONGDYQ: TStringField;
ADOTable1RELYL:TBCDフィールド;
ADOTable1JIANSXM: TStringField;
ADOTable1PIZWH: TStringField;
ADOTable1JIANSGM2:TBCDフィールド;
ADOTable1YONGDXZDM: TStringField;
ADOTable1YONGDWZ: TStringField;
ADOTable1DONGL: TStringField;
ADOTable1XIL: TStringField;
ADOTable1NANL: TStringField;
ADOTable1BEIL: TStringField;
ADOTable1CHANG:TBCDフィールド;
ADOTable1KUAN:TBCDフィールド;
ADOTable1ZONGMJ1:TBCDフィールド;
ADOTable1ZONGMJ2:TBCDフィールド;
ADOTable1YOUXRQ1: TDateTimeフィールド;
ADOTable1YOUXRQ2: TDateTimeフィールド;
ADOTable1BEIZ: TStringField;
ADOTable1JINGB: TStringField;
ADOTable1SHENH: TStringField;
ADOTable1SHEND: TStringField;
ADOTable1SHENDRQ: TDateTimeフィールド;
ADOTable1PICTURE:TBlobField;
プライベート
{プライベート宣言}
公共
{公的宣言}
終わり;
変数
顧客データ: TCustomerData;
実装
{$R *.DFM}
終わり。
{===========Unit23.pas===============}
ユニットユニット23;
インタフェース
Windows、SysUtils、メッセージ、クラス、グラフィックス、コントロールを使用します。
StdCtrls、ExtCtrls、フォーム、Quickrpt、QRCtrls;
タイプ
TIdearRpt = クラス(TQuickRep)
ページフッターバンド 1: TQRBand;
PageHeaderBand1: TQRBand;
QRラベル1: TQRラベル;
QRラベル2: TQRラベル;
QRラベル3: TQRラベル;
QRDBText15: TQRDBText;
QRDBText17: TQRDBText;
QRDBText19: TQRDBText;
QRDBText13: TQRDBText;
QRラベル46: TQRラベル;
QRラベル47: TQRラベル;
タイトルバンド 1: TQRBand;
QRShape1: TQRShape;
QRShape2: TQRShape;
QRShape3: TQRShape;
QRShape4: TQRShape;
QRShape5: TQRShape;
QRShape6: TQRShape;
QRラベル4: TQRラベル;
QRラベル5: TQRラベル;
QRラベル6: TQRラベル;
QRShape7: TQRShape;
QRShape8: TQRShape;
QRラベル7: TQRラベル;
QRラベル8: TQRラベル;
QRラベル11: TQRラベル;
QRラベル12: TQRラベル;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText4: TQRDBText;
QRDBText6: TQRDBText;
QRDBText3: TQRDBText;
QRShape9: TQRShape;
QRラベル9: TQRラベル;
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;
QRラベル10: TQRラベル;
QRラベル13: TQRラベル;
QRラベル14: TQRラベル;
QRラベル15: TQRラベル;
QRラベル16: TQRラベル;
QRラベル17: TQRラベル;
QRラベル18: TQRラベル;
QRラベル19: TQRラベル;
QRラベル20: TQRラベル;
QRラベル21: TQRラベル;
QRラベル22: TQRラベル;
QRラベル23: TQRラベル;
QRラベル24: TQRラベル;
QRラベル32: TQRラベル;
QRラベル33: TQRラベル;
QRラベル34: TQRラベル;
QRラベル35: TQRラベル;
QRラベル36: TQRラベル;
QRShape20: TQRShape;
QRラベル37: TQRラベル;
QRラベル38: TQRラベル;
QRラベル41: TQRラベル;
QRラベル42: TQRラベル;
QRラベル43: TQRラベル;
QRラベル44: TQRラベル;
QRラベル45: TQRラベル;
QRラベル48: TQRラベル;
QRラベル49: TQRラベル;
QRラベル50: TQRラベル;
QRラベル51: TQRラベル;
QRラベル52: TQRラベル;
QRラベル53: TQRラベル;
QRラベル54: TQRラベル;
QRラベル55: TQRラベル;
QRラベル56: TQRラベル;
QRラベル57: TQRラベル;
QRラベル58: TQRラベル;
QRラベル59: TQRラベル;
QRラベル60: TQRラベル;
QRラベル61: TQRラベル;
QRShape28: TQRShape;
QRラベル62: TQRラベル;
QRラベル63: TQRラベル;
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;
QRメモ4: TQRメモ;
QRDBText36: TQRDBText;
QRDBText37: TQRDBText;
QRDBText38: TQRDBText;
プライベート
公共
終わり;
変数
IdearRpt: TIdearRpt;
実装
ユニット 2 を使用します。
{$R *.DFM}
終わり。
{==========PrintT.dpr============}
ライブラリPrintT;
{%ファイル 'Print.asp'}
用途
コムサーブ、
「PrintT_TLB.pas」のPrintT_TLB、
「Unit1.pas」の Unit1 {Print: CoClass}、
「Unit2.pas」の Unit2 {CustomerData: TDataModule}、
「Unit23.pas」の Unit23 {IdearRpt: TQuickRep};
輸出
DllGetClassObject、
DllCanUnloadNow、
DllRegisterServer、
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
始める
IdearRpt := TIdearRPt.Create(NiL);{必須}
終わり。
ステップ 5: ASP コードで呼び出すことができる PrintT コンポーネントをコンパイルして登録します。 呼び出しの例は次のとおりです。
<% Set DelphiASPObj = Server.CreateObject("PrintT.Print")
DelphiASPOBj.Print1
%>
以上の手順により、Delphi を使用したレポート機能を備えた ASP コンポーネントの開発に成功しました。もちろん、著者は出発点として役立つことを期待して、単純なアイデアを紹介しただけです。