Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103753729
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-08 21:23:35

作者:Neo  出处:Unix爱好者家园unix-cd.com  
 注意:本文方案适用于asp通过自开发组件连接所有类型的数据库

现在某些企业的数据库用的是informix,多数开发者对这个数据库操作的比较少,

因为当前该公司已经被IBM吃掉,而IBM主推的是其DB2,不多述

使用olddb组件,通过server.createobject("adodb.connection")建立的连接,连

接都可以成功,但是速度是在满的让人惊慌,尤其数据条数超过2条的表,即使只

是查询一条,也几乎差不出来,整个asp主机的效率直线下降,内存占用增加。对

待此问题,我使用delphi写了一个简单的组件。

主要代码如下:
unit main;
{$WARN SYMBOL_PLATform OFF}

interface

uses
 ActiveX, Mtsobj, Mtx, ComObj, aspbde_TLB, StdVcl,DB,dbtables,SysUtils;

type
 Tbdeasp = class(TMtsAutoObject, Ibdeasp)
 protected
   function open(const sqlstr, aliname: WideString): OleVariant; 

safecall;
   function execute(const sqlstr, connstr: WideString): OleVariant; 

safecall;
   { Protected declarations }
 end;

implementation

uses ComServ;

function Tbdeasp.open(const sqlstr, aliname: WideString): OleVariant;
var
 tmpre:variant;
begin
   tmpre:=createoleobject('adodb.recordset');
   try
    tmpre.open(sqlstr,aliname);
   except

   end;
   result:=tmpre;
end;

function Tbdeasp.execute(const sqlstr, connstr: WideString): OleVariant;
var
 tmpre:variant;
begin
   tmpre:=createoleobject('adodb.connection');
   try
    tmpre.open(connstr);
    tmpre.execute(sqlstr);
    result:=1;
   except
    result:=0;
   end;

end;


initialization
 TAutoObjectFactory.Create(ComServer, Tbdeasp, Class_bdeasp,
   ciMultiInstance, tmBoth);
end.

本程序中只写了最简单的两个方法 open,execute ,大家可以根据自己的需求添加

其他方法、属性等。

调用方法如下:
ser var=server.createobject("appname.bdeasp")
set rs=var.open("sql语句""数据库连接语句")

rs使用方法与 adodb.recordset对象完全一样,经测试,速度明显加快!!!系统

消耗大量下降,2000万条的数据表,查询速度非常迅速。

欢迎大家实验!!    
阅读(803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~