关于使用Exchange开发三层应用的问题,请大家帮我看看,可能是什么地方有误!?

storm97 2002-07-22 04:08:03
用VB做中间层组件,(ACTIVEX DLL工程)现在有一段代码如下:

该project的名称是wssdll
其中一个class Modules的名称是wsstest
GUID:wssdll.wsstest
引用:Microsoft CDO for Exchange 2000
Microsoft Activex Data Object 2.6
(我机器上有ADO2.7,我没用,换成2.7也是下面的问题!)

Public Function GetRs() As Recordset
Dim rs As New ADODB.Recordset
Dim objconn As New ADODB.Connection
strMailUrl = "file://./backofficestorage/" + DomainName + "/mbx/" + UserName + "/收件箱/"
objconn.Provider = "ExOLEDB.DataSource"
objconn.Open strMailUrl
strsql = "SELECT ""DAV:displayname"", "
strsql = strsql + " ""DAV:href"" "
strsql = strsql + " FROM scope('shallow traversal of """ & strMailUrl & """') "
rs.Open strsql, objconn, 1, 1
Set GetRs = rs '注意这里
End Function

另外asp端调用的代码如下:
Set wsscom=Server.CreateObject("wssdll.wsstest")
Set Srs=wsscom.GetRs
Response.Write Srs.recordcount

但是在asp端无法得到GetRs方法返回的rs集合,提示错误
err.description=缺少对象
err.number=缺少对象424

但是这个DLL在VB中用一个standard exe工程却可以成功调用,并返回正确的rs集合
用asp无法得到VB中间件返回的rs集合,用vb自己则可以得到。
不知道这是什么问题,请大家帮忙,看看!在此表示感谢!
...全文
45 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
scgqq 2002-07-23
  • 打赏
  • 举报
回复
楼上所说有理
rockrabbit 2002-07-23
  • 打赏
  • 举报
回复
功能: 列出folder的子folder
' 输入:
' strFolderURL: Web Store 文件夹 的 URL 路径
' 输出:
' 子folder集合
'*******************************************************************
Public Function ListChildFolder(ByVal strFolderURL As String) As Collection
Dim colChildFolders As New Collection
Dim strChildFolderURL As String

Dim rst As ADODB.Recordset
Dim rc As New ADODB.Record

mstrErrorMessage = ""

On Error GoTo ErrorHandler
If Not (Init_Check()) Then Err.Raise 518, mstrErrorMessage
On Error Resume Next
'--------------------------------------
rc.Open strFolderURL, mCon '打开Record对象
If Err Then
mstrErrorMessage = Err.Description
Err.Clear
Set colChildFolders = Nothing
Set rst = Nothing
Set rc = Nothing
Set ListChildFolder = Nothing
Exit Function
End If

On Error GoTo ErrorHandler
Set rst = rc.GetChildren() '取子集至RecordSet
Do While Not rst.EOF
If rst.Fields("DAV:iscollection") Then
strChildFolderURL = rst.Fields("DAV:href")
colChildFolders.Add strChildFolderURL
End If

rst.MoveNext
Loop

Set ListChildFolder = colChildFolders
Set colChildFolders = Nothing
Set rst = Nothing
Set rc = Nothing
Exit Function
ErrorHandler:
Set colChildFolders = Nothing
Set rst = Nothing
Set rc = Nothing

mstrErrorMessage = Err.Description
Err.Clear
End Function
scgqq 2002-07-23
  • 打赏
  • 举报
回复
不好意思,你发给我的dll里已经没用后面的参数了,我再看看
rockrabbit 2002-07-23
  • 打赏
  • 举报
回复
ASP是不支持从组件中直接取一个RecordSet对象的,但可以传出一个集合(Collection)对象。

我遇到过类似问题。解决办法有两种:
1.在组件中,定义并创建一个集合对象。将可能用到的字段加到集合中,然后,传出这个集合。
2.不传出集合,直接传出Recordset的字段。如果,要在纪录中移动,就在组件中移动,然后取出新的字段。
scgqq 2002-07-23
  • 打赏
  • 举报
回复
我想使你的参数有问题吧,用这个参数呢?其实你可不必设参数的呀!
rs.Open strsql, objconn,adOpenKeyset,adLockBatchOptimistic,adOptionUnspecified
storm97 2002-07-23
  • 打赏
  • 举报
回复
没人能看一下吗?
storm97 2002-07-23
  • 打赏
  • 举报
回复
ASP是不支持从组件中直接取一个RecordSet对象的,但可以传出一个集合(Collection)对象。---This's wrong!
肯定可以的,对于我所见过的非WSS的存储系统的数据库,asp肯定可以从Com中得到一个Recordset对象!
但是Exchange WSS经过我的多天的实践,是不行的!谢谢大家!
rockrabbit 2002-07-23
  • 打赏
  • 举报
回复
上午应该是讲错了,实际上ASP是可以从VB写的COM中得到一个Recordset的。
我记得以前就这样用过,在查询MSSQL数据库的COM中。

但如果用在Exchange2k中,好像就有一些问题。在查询Active Directory时,也有同样的问题。因此,可能是和Provider有关。这个问题值得继续关注。
rockrabbit 2002-07-23
  • 打赏
  • 举报
回复
上午应该是讲错了,实际上ASP是可以从VB写的COM中得到一个Recordset的。
我记得以前就这样用过,在查询MSSQL数据库的COM中。

但如果用在Exchange2k中,好像就有一些问题。在查询Active Directory时,也有同样的问题。因此,可能是和Provider有关。这个问题值得继续关注。

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧