ASP返回的RecordSet怎样传入自己的ActiveForm变量中?(100分)

  • 主题发起人 主题发起人 quakekkk
  • 开始时间 开始时间
Q

quakekkk

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,在ASP文件中应该怎么写?(Object对象已经创建,包含在该ASP文件中)高手帮忙!
注意:是整个RecordSet赋值,不是转换成矩阵等形式的间接赋值!
ActiveForm中已定义变量
Frs: _Recordset;
假设ASP中的
rs.Open sqlSrc,Cnn,1,1
已经返回一个RecordSet。
 
你的ActiveForm必须提供这些解析,最好的就是你开发ocx组件的时候,需要定义成属性最好,
比如你在tlb定义了一个属性为WMode.并且提供了实现方法。

你的ASP传递参数就应该这样写。
<html>
<head>
<meta http-equiv=&quot;Content-Type&quot;
content=&quot;text/html;
charset=gb2312&quot;>
<title>无标题文档</title>
</head>

<body>
<object classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;
codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0&quot;
width=&quot;419&quot;
height=&quot;139&quot;>
<param name=&quot;movie&quot;
value=&quot;file:///D|/aspnet/BANNER.SWF&quot;>
<param name=&quot;quality&quot;
value=&quot;high&quot;>
<param name=&quot;WMode&quot;
value=&quot;你的值&quot;>//这里传递参数
<embed src=&quot;file:///D|/aspnet/BANNER.SWF&quot;
width=&quot;419&quot;
height=&quot;139&quot;
quality=&quot;high&quot;
pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;
type=&quot;application/x-shockwave-flash&quot;
wmode=&quot;你的值&quot;></embed></object>
</body>
</html>
通过VALUE传递你的值,就可以了,wmode=&quot;你的值&quot;
value='x'''xxxx
 
你说的这种基本的整数、字符串等Param我会的,但这是一个RecordSet,在添加属性的时候根本没有这种数据类型。
我已测试在ActiveForm中添加属性ARecordSet,类型为Variant,而且,在ASP文件中有如下语句:
<param name=&quot;ARecordSet&quot;
value=<%= rs %>>
想用
Frs := IUnknown(ARecordSet) as _RecordSet
进行转换赋值,但传递过来的根本不是一个RecordSet,显示是:<fon
反正是个错误的东西,把<%= rs %>换成<%Response.BinaryWrite rs%>也不行。
大侠支招啊!
 
我明白了,你知道如何给一个OCX控件通过属性复制,你可以需要给这个ocx赋值的值的类型,可能是图像,BLOB等字段吧。
我给你一个参考,我没有写完,就是把一个frf二进制进行赋值。方法如下,节选。
引--使用DELPHI做WEB报表。可是使用ReportMachine,或者FastReport
但是相对来讲,FastReport比较好该写。。。

网上的资料:
WEB报表解决方案:www.delphibox.com有源代码下载。
当然也可是使用三层结构,制作方便。。

但是这个方法是通过临时存储文件实现的。真的希望制作的ASP Server组件能够不需要临时存储文件,就可以获得请求并且传递请求。
第一步:开发Active Server Libary 的MTS组件,这个组件就可以和ASP的内置组件一样的方便。

1。修改FastReport类库,把原来的SavePrepareReport(FileName:String);改成内存流。
2。使用zlib.pas对流进行压缩最好。
3。Internet的编码问题,可以引用EncdDecd.pas对流进行编码成String;
这样就可以使用简单的VBSCRIPT/JAVASCRIPT调用这个组件了。
第二步:开发界面的ActiveXControl
1。主要应用EncdDecd.pas,对String进行解码。
2。修改FastReport类库,让打开Frp的文件改成,可以打开string.
3。最好分发成CAB格式。写好DestDir=11,(11表示c:/windows/system目录下)

第三步:解决数字签名问题。
1。使用ocx最讨厌的就是被防火墙过滤掉,这时可是使用对Ocx进行数字签名。
2。把签名文件.cer放到网页的虚拟目录下,就OK.

这样的WEB报表才最具有扩展行,方便性。

我以前写的笔记,你可以看出,如果是不同的类型,需要给这个类型进行从streamtostring的转换,转换的方式主要应用EncdDecd.pas,对String进行解码。为了提高BLOB的网络速度,你可以vclzip进行压缩。。。
 
我没有Stream来源啊,而且,考虑到安全问题,不允许ActiveForm的ocx直接连数据库。只有调用该ocx的ASP文件才能读取数据库,那我这个Stream怎么构造?。不过,还是非常感谢!
 
开发Active Server Libary 的MTS组件
来做一个新的ASP服务组件,这个组件可以连接数据库,而且可以把BLOB转变为XMLstring;
这个是上面的方法核心。这个例子OCX没有和数据关联啊。。。我的普通话太差了,结果你没有听懂。。
这个OCX完全脱离数据库,但是需要ASP SEVER支持。(这个ASP和ADO一样都是MTS/AUTO组件)

如果不开发这个组件,你可以使用ASP或者JAVASCRIPT做这个BLOB->STRING的代码,
不过这个蓝叶不会了。。。。我DELPHI还会一点点,ASP/JSCRIPT就完全不懂了,你知道DOWNLOAD代码了。
 
那问题集中在如何吧ASP中返回的RecordSet转换成String,即编码,再赋值到ocx的某个BSTR类型中,最后再还原成RecordSet类型,即解码。是吗?我试试看
 
楼主聪明。
你看学多的OCX复杂都是这样做的。。。
 
找到解决方案:
在ActiveForm中添加属性ARecordSet,类型为BSTR,在ASP文件中有如下语句:
<param name=&quot;ARecordSet&quot;
value=<%= rs.GetString(2) %>>
然后直接对这个String进行处理。我想,要把这个String转换成_RecordSet应该没有问题,只是我没必要转换了。
注:RecordSet的GetString()语法:
Set Variant = recordset.GetString(StringFormat, NumRows, ColumnDelimiter, RowDelimiter, NullExpr)
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部