函数返回文档对象的问题

来源:互联网 发布:mac版inode安装教程 编辑:程序博客网 时间:2024/05/16 19:26

下面的函数是copyfunc() 拷贝一个文档到指定的数据库中,然后返回拷贝生成的文档。

Function copyfunc() As NotesDocument
 Dim session   As New notessession
 Dim db    As notesdatabase
 Dim doc    As notesdocument
 Dim dbarc  As notesdatabase
 
 Set db = session.currentDatabase
 filename = "a_"+DB.filename
 Set dbarc = session.getDatabase(DB.server,"archive/"+filename,False)
 Set doc = session.documentcontext
 
 Set copyfunc = doc.CopyToDatabase(dbarc)
 'Set copyfunc = testdoc
End Function

-------------------------------------------------------------------------------------------

但在调用该函数时出现一个问题。 

Set testdoc = copyfunc()
  
 If testdoc Is Nothing Then
  Messagebox "111111111111"
 End If
返回的文档对象testdoc是空的。用debug跟踪,在执行到函数中时,代码运行正常,文档拷贝并返回。但在返回到函数调用处后,testdoc文档对象“消失”。

1、为什么返回后没有了呢?是不是返回方式上有问题,于是将原来的函数返回对象的方式改为参数传递的方式。即Function copyfunc(testdoc as notesdocument)。跟踪调试时,问题仍然一样。

2、不是函数返回的问题,那么问题就在函数里面了,但函数执行过程看起来很正常啊。那么问题是在哪里呢?我联想到以前曾经遇到一些数据库对象没有打开的问题,会不会是函数在结束时,服务器清除了数据库对象,而导致返回的文档被关闭?于是改变函数体和参数,传递拷贝到的数据库对象到函数,经过处理后返回文档对象。经过测试正常。

结论,1、在处理其他数据库中的文档时,注意数据库对象和其文档对象处于同一代码中。如果不在同一代码中,其文档对象可能会无效。2、注意函数变量的生命期。在函数结束时,局部变量都将被清除。