日期:2012-04-29  浏览次数:20849 次

由于Delphi在开发数据库应用系统中具有的强大的功能和极高的效率,所以笔者开发ASP组件较常用的是Delphi 5.0(当然也可采用Visual Basic或VC++开发ASP组件),Delphi本身在Internet和InternetExpress两个组件面板提供了众多的组件可以直接生成Web页面,但是这些组件都缺少网页中数据显示常见的分页功能。众所周知,ASP是通过建立ADO连接数据库后建立RecordSet对象,然后利用RecordSet的AbsolutePage进行页面定位,而在Delphi 5.0中,已提供了ADO组件封装了Microsoft的ADO库,所以同样具有页面定位功能。下面笔者将分步来开发一个通用的显示分页Web页面的ASP组件。
    
    第一步:新建一个Activex Library,命名为PadoPage,然后再新建一个Active Server Object Class,命名为AdoPage,即建立了一个名为AdoPage的ASP组件,文件命名为Adopage.pas。
    
    第二步:打开Type Library,新建一个方法Get_Page,然后在Get_Page加入一个参数Pconnandsgl,用于传递数据库连接语句和SQL语句,参数选择为BSTR类型。
    
    第三步:新建一个DataModule,放入Adoconnection组件和AdoQuery组件,将Data Module命名为AdoDataModule。由于新建立的组件中的方法Get_Page要从DataModule中取得数据,所以需在Adopage.pas的Uses子句中加入AdoDataModule,然后声明一个数据模块的变量fadodm,同时加入Initialize和Destroy这两个方法,以便在ASP组作中生成数据模块。Adopage.pas具体代码如下所示:
    
    unit Adopage;
    
    interface
    
    uses
    
     ComObj, SysUtils, Classes, ActiveX, AspTlb, Pbasedata_TLB, StdVcl, AdoDataModule;
    
     //将AdoDataModule加入USE子句
    
    type
    
     T Adopage = class(TASPObject, Ibasedata)
    
     private
    
     fadodm:TAdoDataModuleform;
    
     protected
    
     procedure OnEndPage; safecall;
    
     procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
    
     procedure get_page(const pconnandsql: WideString); safecall;
    
     public
    
     procedure initialize;override;
    
     destructor destroy;override;
    
     end;
    
    implementation
    
    uses ComServ,forms;
    
    destructor Tadopage.destroy;
    
    begin
    
     inherited;
    
     fadodm.Destroy;
    
    end;
    
    procedure Tadopage.initialize;
    
    begin
    
     inherited;
    
     fadodm:=tadodmform.Create(forms.application);
    
    end;
    
    第四步:建立通用的分页显示数据的方法get_page,具体代码如下:
    
    procedure Tadopage.get_page(const pconnandsql: WideString);
    
    var i,j,n:integer;
    
    connstr,sqlstr:widestring;
    
    rs:_recordset;
    
    cur_url:widestring;
    
    page_no:integer;