网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP实例
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.完整的站点访问统计系统(一:数.
.用多种方法制作WEB页面的计数器.
.网络精英计数器源程序.
.最简单的ASP聊天室(附源码).
.磁盘ID在ASP源码防拷贝中的应用.
.FrontPage创建HTML/ASP混合页面.
.制作一个个人搜索引擎(源码).
.多图片上传到指定的目录并存到数.
.用ASP开发试题库与在线考试系统(.
.一个免费的邮件列表源程序(三).
.利用ASP.NET设计FTP文件上传(下).
.如何用ASP编写网站统计系统(二).
.一个实用的FSO-实时统计在线人数.
.一个免费的邮件列表源程序(二).
.如何使用FSO搜索硬盘文件.
.趣味访客计数器设计两则.
.一个功能完善的专栏管理的程序-&.
.全文本检索的应用(3).
.利用ASP生成EXECL文档.
.轻松实现将上传图片到数据库.

用Delphi开发ASP分页组件

发表日期:2001-7-31


  随着网络技术的发展和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组件了。
上一篇:磁盘ID在ASP源码防拷贝中的应用 人气:9711
下一篇:如何在DataGrid控件中隐藏列 人气:14541
浏览全部分页的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐