您的位置:首页网页设计ASP实例 → 用Delphi开发ASP分页组件

用Delphi开发ASP分页组件

时间:2004/11/7 2:56:00来源:本站整理作者:蓝点我要评论(0)

随着网络技术的发展和Internet的普及,Browser/Server在软件开发中已成为主流,笔者在开发一个ERP系统时,就采用了B/S软件模式,具体架构为SQL Server+IIS+IE网页采用的是Active Server Page文件。由于系统涉及大量的数据操作和查询,若纯粹采用ASP脚本语言编写势必造成效率低下,为了提高系统的整体效率和安全性,笔者采用了ASP组件来代替ASP脚本语言。





  由于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;



  begin



  //首先从传递过来的参数中分别取出连接串和SQL语句



  pconnandsql:=uppercase(pconnandsql);



  i:=pos('CONNSTR',pconnandsql);



  j:=pos('SQLSTR',pconnandsql);



  if i=0 or j=0 then



   begin



   response.write('数据库连接串或SQL语句错误!');



   abort;



   end;



  for n:=I+8 to j-1 do



   connstr:=connstr+pconnandsql[n];



  for n:=j+7 to length(pconnandsql) do



   sqlstr:=sqlstr+pconnandsql[n];



  //将取得的连接串和SQL语句分别赋给ADOconnection和ADOQuery



  fadodm.adoconnection1.connstring:=connstr;



  fadodm.adoquery1.sql.add(sqlstr);



  //以下为打开数据库并进行分页的过程



  try



   fadodm.adoquery1.open;



  //打开数据库



   rs:=fadodm.adoquery1.recordset;



  //取得当前打开页面的URL和页码



   try



   if request.servervariable['url'].count>0 then



   cur_url:= request.servervariable.item['url'];



   if request.querystring['page_no'].count>0 then



   page_no:=request.querystring.item['page_no']



   else



   page_no:=1;



   except



   end;



   rs.pagesize:=20;



  //每页设为20行



   rs.AbsolutePage:=page_no;



  //页面定位



   response.write('共'+inttostr(rs.pagecount)+'页& ');



   response.write('第'+inttostr(page_no)+'页& ');



  //对每个页码建立超链接



  for i:=1 to rs.pagecount do



  response.write('<a href="'+cur_url+'?page_no='+inttostr(i)+'">'



  +inttostr(i)+'</a>');



  //数据记录按表格显示



  response.write('<table>');



  //取得表格标题



  response.write('<tr>');



  for I:=0 to fadodm.adoquery1.fields.count-1 do



   response.write('<td>'+fadodm.adoquery1.fields[i].fieldname+'</td>');



  response.write('</tr>');



  j:=1



  with fadodm.adoquery1 do



   while (not eof) and j<=rs.pagesize do



   begin



   response.write('<tr>');



  //取得表格内容



  for i:=1 to fields.count do



   response.write('<td>'+fields[i].asstring+'</td>');



   response.write('</tr>');



   next;



   end;



  response.write('</table>');



  fadodm.adoquery1.close;



  except



  response.write('数据出错啦!');



   end;



  end;



  以上即为取得通用分页数据的过程,需要注意的是编译时部分函数会出错,只需在USES子句中加入sysutils、classes和adodb单元即可。



  第五步:编译并注册adopage组件,即可在ASP代码中调用,调用示例如下:



  <%



  dim webpageobj



  set webpageobj=server.createobject("padopage.adopage")



  webpageobj.get_page("conn=provider=SQLOLEDB.1;presist security info=false;



  user id=sa;initical catalog=sale_data;data source=(local),



  sqlstr=selectfrom customer")



   %>



  通过以上步骤,我们就顺利地利用Delphi开发出了具有分页功能的ASP组件了。


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 迅雷新手完全入门手册 asp下面javascript上传图片限制格式大小方法告诉大家网页弹出窗口应用总结ASP常见错误类型大全asp常见错误分析和解决办法

人气排行 总是弹出visual studio 实时调试器 三种解决SQLSERVER存储过程及调用详解Asp获取真实IP地址ASP中连接Mssql的几种方法一个简单好用的UBB编辑器(含代码)如何用Split将字符串转换为数组并获取数组下ASP防止表单重复提交的办法告诉你免费的简单聊天室源代码