CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

用DELPHI开发的ACTIVEX如何接收ASP的数据集

楼主dacsd(dacsd)2004-12-04 17:13:38 在 Delphi / 数据库相关 提问

我用DELPHI开发一个ACTIVEX控件,希望从ASP中获得数据集,不知如何做,ASP已经得到数据,关键是ACTIVEX如何接收。  
   
  如下,asp已经获得数据集RS,如何才能让ACTIVEX中接收到数据集RS,关键是ACTIVEX如何接收,也就是在DELPHI中如何写代码。它与接收字符串有何不同。其他的参数都可以正常接收。  
   
   
  <%  
  Set   conn   =   Server.CreateObject("ADODB.Connection")  
  set   rs=server.createobject("ADODB.Recordset")  
  conn.Open   "driver={SQL   Server};server=127.0.0.1;uid=sa;pwd=88888888;database=db"  
   
  strsql="select   *   from   gtd"    
     
  rs.Open   strsql,Conn,1,1  
   
  %>  
   
  请高手帮忙解答 问题点数:100、回复次数:15Top

1 楼surdon(ャ野马ャ)回复于 2004-12-04 17:20:57 得分 2

陪你一起等Top

2 楼dacsd(dacsd)回复于 2004-12-06 07:46:35 得分 0

请各位高手看看Top

3 楼ghchen()回复于 2004-12-06 09:07:35 得分 2

不会,关注,顶Top

4 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2004-12-06 09:51:02 得分 2

不会,而且不知道搂住这种做法到底有什么实用价值。  
  难道delphi不能直接读数据库吗???  
  帮顶Top

5 楼dacsd(dacsd)回复于 2004-12-07 08:04:31 得分 0

我是用delphi作activeX控件,用ASP调用,如果把读取数据的功能放在activeX中的话,需要经常修改activeX,也就是要经成性的重新编译程序,同时,通用性也不强,因为ASP的编写相对简单,用记事本就行,更何况,不同的地方读取的数据也是不同的,我让这个控件做到只接收asp的数据,从而让他适应不同的地方。Top

6 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2004-12-07 08:23:11 得分 2

哦,明白了,你的想法挺好的,能够发挥两者的优点.  
  不过我不会,陪你一起等.期待高手解决!!!Top

7 楼tjkjdx1(tjkjdx)回复于 2004-12-07 09:35:49 得分 2

学习,帮搂主,顶上去~Top

8 楼ljyt(罗云)回复于 2004-12-07 11:30:37 得分 15

如果activex控件是在客户端执行的话,那就不行的,如果实在服务器端执行,是可行的,delphi的dataset对象有_Recordset接口可以利用的Top

9 楼dacsd(dacsd)回复于 2004-12-07 14:07:05 得分 0

终于等到高手了,我的activeX就是在服务器上执行的,请罗大侠明示。  
  谢谢Top

10 楼dacsd(dacsd)回复于 2004-12-07 14:19:27 得分 0

procedure   TdacsdVIEW.ys(fname,BH:   WideString;   blank:   WordBool);  
  如上,我在该activeX控件中接收asp的参数的方法,其中fname,BH是字符串,blank是逻辑型,而WideString和WordBool都是可以在*.tlb中编辑时增加变量,尔后从参数中写上参数名,而WideString和WordBool等等的类型都是选择的,我在里头没有看到有_Recordset类型的,请罗大侠指教。  
  Top

11 楼failer(独败)回复于 2004-12-07 14:45:47 得分 15

ole   com支持的数据类型是有限制的。  
  如果要传RecordSet类型的参数的话,可以试一试OleVariant类型。在程序里再将它视为RecordSet类型使用。这种方法仅仅是我的建议,没有试过。  
  其实,如果是我做的话,我会把数据的读取放到ActiveX对象中。可以在ASP中将选择的SQL语句传给COM对象,然后用Delphi的控件去连接数据库。Top

12 楼dacsd(dacsd)回复于 2004-12-07 16:36:18 得分 0

独败您好!  
          您的想法是我现在用的,这个办法有一些缺点,它不如通过asp将数据集传过去方便。Top

13 楼dacsd(dacsd)回复于 2004-12-08 15:44:13 得分 0

看样子这个问题比较难。Top

14 楼dacsd(dacsd)回复于 2004-12-09 16:15:13 得分 0

再次将帖子提前。Top

15 楼oy145(oy)回复于 2004-12-10 22:15:31 得分 60

给个例子你参考,希望能帮上忙  
   
  用DELPHI开发一个通用的显示分页Web页面的ASP组件。  
   
    第一步:新建一个Activex   Library,命名为PadoPage,然后再新建一个Active   Server   Object   Class,命名为AdoPage,即建立了一个名为AdoPage的ASP组件,文件命名为Adopage.pas。  
   
    第二步:打开Type   Library,新建一个椒℅et_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组件了。  
   
  Top

相关问题

  • delphi怎么接收asp提交过来信息~~~在线等 立刻给分
  • DELPHI 如何接收 C 中的结构
  • 怎样用Delphi开发Asp调用的ActiveX(在线等待)
  • 如何用asp接收XML数据包?
  • 救命呀:用MFC写了个短信接收的Activex控件,在delphi下不出错,但在vb下使用出错
  • Delphi应用-ActiveX
  • delphi下用mscomm接收二进制数组的问题
  • 对于在delphi中使用MSComm的不能接收的问题
  • 用delphi能实现接收器吗?怎么做?
  • Delphi中怎么接收flash中fscommand发出的命令?

关键词

  • 组件
  • 数据
  • asp
  • 命名
  • activex
  • 控件
  • 语句
  • delphi
  • 代码
  • 数据库

得分解答快速导航

  • 帖主:dacsd
  • surdon
  • ghchen
  • heluqing
  • heluqing
  • tjkjdx1
  • ljyt
  • failer
  • oy145

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo