主题:  一个dll问题,我是照csdn上做的,可是怎么就访问不了

wanghuhua

职务:普通成员
等级:1
金币:0.0
发贴:34
#12004/5/21 11:14:45
我在dll里写个这个是adodb.recordset类型的,也是公有的,程序如果下:
Public Function whhrs(sqlstr As String) As adodb.Recordset
Dim myconn As adodb.Connection
Dim myrs As adodb.Recordset
Dim myconnstr As String
Set myconn = New adodb.Connection
Set myrs = New adodb.Recordset
myconnstr = "driver={sql server};server=whh;database=sar;uid=sar;pwd=sarwhh;"
myconn.Open myconnstr
myrs.ActiveConnection = myconn
myrs.Open sqlstr, myconn
Set whhrs = myrs
End Function
怎么我在访问时老是出现以下错误:
"icrosoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'whhrs'
/inc/dll/dll/test.asp,行12 "
而我在我的test.asp里是这样访问的:
set conndll=server.createobject("kinghuhua.sunsoavatar"
sqlstr="select * from prod"
set rs1=conndll.whhrs(sqlstr)
我以为是我的whhrs的类型错了,我改了几次,一次没有类型,一次是variant,一次是recordset都不行,我在dll里又申明了一个公有变量,想通过那个把rs传出来,可是我是访问时用的是:conndll.公有变量明,可是这样访问也会出错,错误是对象没有此属性或方法
请您回答一下,谢谢!!



wanghuhua

职务:普通成员
等级:1
金币:0.0
发贴:34
#22004/5/21 11:17:28
我可是照着下面这个网址做的呀
www.csdn.net/develop/read_article.asp?id=19379



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#32004/5/21 13:06:33
recordset是依赖于connection的,而你的myconn是函数的一个局部变量,方法执行结束,它就结束了生存周期,所有变得不可用。

一般很少直接返回recordset给asp脚本的,你可以将记录集保存为数组再返回variant类型。

用rs.GetRows方法可以将记录另存到数组中。注意执行这个方法前先判断rs.eof



wanghuhua

职务:普通成员
等级:1
金币:0.0
发贴:34
#42004/5/21 16:23:17
先谢谢janlay大哥,我不是想用里面的数据,而是想用那个recordset,帮帮我吧,我都做了几天了,实在没有办法了:(



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#52004/5/22 19:12:43
如果要返回recordset对象,就用外部的connection, 则调用接口如下:

Public Function whhrs(con as connection, sql as string) As adodb.Recordset
End Function

如果一定要在dll中建立连接,就像我上面说的,让函数返回数组



wanghuhua

职务:普通成员
等级:1
金币:0.0
发贴:34
#62004/5/22 20:55:58
谢谢!!!谢谢!!!!我马上去试试



wanghuhua

职务:普通成员
等级:1
金币:0.0
发贴:34
#72004/5/22 21:09:26
噢,对了,我刚才忘了说:(
就是我想用rs的目的就是把conn封装在里面,在样才可以保证数据连接的密码安全,如果是那样。。。55555555
怎么样才可以呀:(