用Delphi开发ASP分页组件

用Delphi开发报表打印的ASP组件         ASP在对数据库操作方面提供了很好的内嵌对象。但是,其他方面的功能有所欠缺,如:报表打印。特别是国内的复杂的报表,用ASP很难实现。       不过,ASP支持插件,这就可以根据需要开发ASP插件,笔者用Delphi5.0开发了ASP打印组件。下面笔者将分步来开发一个通用的报表打印的ASP组件。       第一步:新建一个Activex Library,命名为Pri 阅读详情

随着网络技术的发展和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.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.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组件了。

Delphi开发COM组件扩展ASP功能实战源码 从派生是构建可扩展控件的标准做法,它为后续支持绘画、消息处理及样式定制预留接口。组件注册需调用过程,将类别与组件类关联,使其出现在IDE工具面板上:beginend;这一注册机制不仅影响设计时体验,也决定了组件元数据是否能正确导出至类型库(TLB),进而影响其在COM环境中的可用性。理解TComponent的构造、流式持久化(Streaming)和通知机制(如方法),是开发高性能、高内聚组件的前提,也为第三章中ActiveX DLL的创建打下坚实基础。在COM中,接口。 阅读详情

相关推荐

delphi+mysql实现分页显示

delphi+mysql 在dbgrid上实现分页显示

Delphi与ASP结合进行图片上传

Delphi与ASP结合进行图片上传

锋回路转 710

DELPHI分页控件

实现了缓存分页机制,自动刷新,页级排序。分页时与后端数据断开,保证了数据传输因流量过大而阻塞。 类似于ADODATASET,但支持了ADO,BDE,及最新的DBX。 在ORACLE上测试通过。

asp毕业设计——基于Delphi+USB KEY的文件加密工具设计与实现(毕业论文+程序源码)——文件加密工具

随着信息技术的飞速发展,文件的安全性越来越被重视。为了实现对个人重要信息的加密,防止别人窃取个人的文件信息,提高文件的安全性,文件加密成为了一个重要的课题。本设计为了解决用户记忆烦琐的密码问题,以软、硬件相结合的方式,实现了文件加密和解密的功能。具有操作简单、稳定性高、兼容性好、速度快等特点。该系统使用Rockey2加密锁,用Delphi进行开发。本系统分为两部分,一部分是文件的加密解密;另一部分是加密锁的管理工具。后一部分由本人完成。

m0_66238867的博客 760

Delphi dbgrideh分页实例 带数据库.rar

Delphi dbgrideh分页实例 带Access数据库,delphi7 关联adoquery实现dbgrid与dbgrideh的分页显示功能,提高多条数据的查询效率。分页原理:利用ID大于多少和SELECT TOP分页。   语句形式:SELECT TOP 页大小 * FROM 表名 WHERE (ID >(SELECT MAX(id) FROM    (SELECT TOP 页大小*页数 id FROM 表名 ORDER BY id) AS T))    ORDER BY id   将RID建立索引,然后根据RID进行分页   本例数据库采用Access文件。

delphi 动态创建分页和按钮

利用delphi原始的控件和代码实现对tablesheet动态添加分页,并在分页中添加按钮

分页控件

分页控件 UIPageControl 作用:通常与UIScrollView连用,提示用户当前显示的页数 常用属性和方法 // 共有几个分页“圆圈” @property(nonatomic) NSInteger numberOfPages; // 显示当前的页 @property(nonatomic) NSInteger currentPage; //

applexiaozhu的博客 388

Delphi 表格分页控件

(1)、使用许可 您可以自由复制、分发、修改本源码,但您的修改应该反馈给作者,并允许作者在必要时, 合并到本项目中以供使用,合并后的源码同样遵循本版权声明限制。 您的产品的关于中,应包含以下的版本声明: 本产品使用的分页控件(TDevDataPager)版权归作者所有。

Delphi 模拟分页效果 控件批量赋值

1. 设计界面 12个显示模板 每个模板两个TImage(一个头像, 一个性别), 一个TLabel(姓名). 命名带有一定规律: 头像的TImage的Name从 img_01 ~ img_12 性别的TImage的Name从 isex_01 ~ isex_12 姓名的TLable的Name从 lbl_01 ~ lbl_12 2. 新建单元uVar....

691

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

miniDP与DP管脚定义差异详解及设计避坑指南

本文详细解析了Mini DisplayPort与标准DisplayPort接口在管脚定义上的核心差异,通过对比表格直观展示了两者20针脚的不同排列方式,特别是高速差分信号线的分布。文章结合真实设计案例,为硬件工程师提供了从原理图设计、PCB布局到信号完整性考量及故障排查的完整避坑指南,强调绝不能将两者视为简单的物理缩小版。

weixin_29248653的博客 362

用DELPHI为ASP开发文件上载组件

用DELPHI为ASP开发文件上载组件 深圳王发军  返回 ASP(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+ASP的模式,使得ASP成为目前较为流行的网站开发脚本语言。在WEB服务中,文件上载服务是一个很常见的功能,而WIN9X下的PWS没有提供相关

chinamao的原创地 885

关于使用vcpkg下载osgearth遇到的问题

注意--x-manifest-root=后面跟着的E:\gitproject\osgearth-osgearth-3.5\vcpkg是你下载的源码解压缩后vcpkg.json的文件地址,然后等待编译完成。安装vcpkg后使用vcpkg install osgearth:x64-windows安装好osgearth并且导入项目使用时,发现无法运行官方文档中示例的main.cpp。这里写一种自己用过的使用vcpkg安装osgearth3.5的方法,源码,打开vcpkg所在的命令行,执行。示例main.cpp。

m0_61776040的博客 1523

用Delphi 6开发ASP上传组件详解

用Delphi 6开发ASP上传组件详解左轻侯2002.6.20  文件上传是WEB开发中经常要用到的功能,但ASP本身和内置的组件都不支持文件上传功能。网上流传的一些第三方组件虽然能够解决这个问题,但大多是要收费的,更别说Open Source了。本文将详细剖析WEB文件上传的原理,以及一步步指导读者如何用Delphi6开发一个ASP上传组件。源码和demo我已经发布在个人主页上http:/

qinghou的专栏 3724

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案

本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。

weixin_29240711的博客 976

新手必看:TwinCAT死活扫不到倍福CX5020?别慌,先检查这3个地方(附静态IP配置)

本文详细介绍了TwinCAT软件无法扫描到倍福CX5020控制器的常见问题及解决方案。从网络连通性检查、系统环境配置到静态IP设置,提供了一套完整的排查流程和优化建议,帮助新手快速解决通信问题,确保设备稳定运行。

weixin_27219587的博客 363

用Delphi编写ASP的ActiveX

ASP中的ActiveX服务器组件为标准的Automation ActiveX组件,只要使用由ASP提供的接口和遵守ASP有关规则便可。Delphi 作为一种高效、快速、强大的开发语言,为开发COM组件提供了很强的功能。本文意在通过举例介绍如何运用Delphi编写ASP中的ActiveX 组件。 通过以下步骤创建ASP中的ActiveX 服务器组件: 1.创建一个ActiveX library工程...

weixin_34199405的博客 1172

IAR9.4报错之编码方式

IAR9.40编码方式错误导致的报错

qq_36081075的博客 2625

在Delphi中实现ASP编程

在Delphi中实现ASP编程   众所周知,asp技术是我们在以internet/intranet为平台的web程序的主要技术,在asp应用程序中我们一般使用vbscripts和javascripts两种脚本语言。但是脚本语言是一种非编译的语言,其所开发的web程序存在先天的安全性、执行效率扩张性方面的问题,因此我们一般在开发web系统时用高级语言编写asp执行体

zou5655的专栏 889

langchain4j+milvus实战

本文主要研究一下如何使用langchain4j来对接向量数据库milvus。

go4it 1471

数据分析:蛋白质组的GO term的富集分析详解

在获取差异表达蛋白质的数据之后,依据蛋白质与基因的对应映射关系,开展GO(Gene Ontology)term的富集分析。通过这一分析流程,能够精准地识别出不同实验组中过表达基因所关联的显著富集的GO term通路。这些富集的GO term通路为后续的生物学研究提供了关键线索,有助于深入探究基因功能、揭示潜在的生物学机制,从而推动生物学发现的进程。

专注生信领域 1366

如何在Delphi中实现ASP编程

如何在Delphi中实现ASP编程   众所周知,asp技术是我们在以internet/intranet为平台的web程序的主要技术,在asp应用程序中我们一般使用vbscripts和javascripts两种脚本语言。但是脚本语言是一种非编译的语言,其所开发的web程序存在先天的安全性、执行效率扩张性方面的问题,因此我们一般在开发web系统时用高级语言编写asp执

zou5655的专栏 767

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 如何在Delphi中编写控制面板程序
下一篇: 钩子(HOOK)机制的使用
thinkray
博客等级 码龄22年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值