由于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=selectfrom customer")
%>
通过以上步骤,我们就顺利地利用delphi开发出了具有分页功能的asp组件了。
用Delphi开发ASP分页组件
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用Delphi开发ASP分页组件
相关推荐
-      ASP 简介
-      SQL注入天书 – ASP注入漏洞全接触
-      用.net 处理xmlHttp发送异步请求
-      asp.net创建文件夹的IO类的问题
-      如何实现ASP.NET网站个性化
-      关于ASP.NET调用JavaScript的实现
-      ASP利用Google实现在线翻译功能
-      Asp无组件生成缩略图
