Open RPC channel limit trouble

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I need to extract some data from custom items in a public folder and transfer
it to an Access database. The trouble is, after the first 249 items my code
can't open any more items. The trouble is definitely with the limit of 255
open RPC channels.

I understand the normal advice is to make sure all your objects are closed
in the reverse order they were opended, and to attempt to release the
channels between processing items. I have taken my code and stripped it down
to remove all the distractions, and this is what is left.

Sub Printx()
Dim objApp As Outlook.Application
Dim objExp As Explorer
Dim objFolder As Outlook.MAPIFolder
Dim colJobItems As Outlook.Items
Dim objJobItem As Outlook.PostItem
Dim x As Integer

Set objApp = CreateObject("Outlook.Application")
Set objExp = objApp.ActiveExplorer
Set objFolder = objExp.CurrentFolder
Set colJobItems = objFolder.Items
Set objJobItem = colJobItems.GetFirst
x = 1
Do While Not objJobItem Is Nothing
Debug.Print x 'To hold the place of my actual processing
x = x + 1
Set objJobItem = Nothing
Set objJobItem = colJobItems.GetNext
Loop
Set objJobItem = Nothing
Set colJobItems = Nothing
Set objFolder = Nothing
Set objExp = Nothing
Set objApp = Nothing
End Sub

I have also tried it without the Do While .. Loop, and called the whole
thing from a "For x = 0 to 300 ... Next" construction, but I still get the
same problem: 249 successful read/writes then it all packs up. Can anyone
suggest how I might make this work.

I really hope someone can give me some useful advice here.

Thanks inadvance

Vaughan
 
What about counting the first 240 items, then closing and setting to
nothing your folder, explorer window, and application. Then recreating
your folder, exp window and app, then doing the next 240.

Inside your loop you would have an item counter 'y', which increments
every time. Then have an if statement, if y > 240 then close
everything, open everything, reset y to 0.

It's a clumsy workaround, and I haven't tested it, but it's an idea.
 
Further to this, I have found that defining "objJobItem" as "Object" rather
than "Outlook.PostItem" with the rest of the code as shown below avoids the
open RPC channel limit problem. BUT if I then try to extract the value from a
UserProperty, the problem reappears.

Does this make any sense to anyone?

TIA

Vaughan
 
Thanks for your suggestion Stuart. I did try this, but it turns out this
doesn't close the channels. I even cloned the code to make two seprate
routines and called them from a third one - no luck. I just don't seem to be
able to close the channels until the code runs out.
 
Hi,

DId you get any resolve for this issue? I am having exactly same problem but
in C++
Raj
 
Hi Rajesh

I never found a solution to this. In the end I had to change my approach to
limit the number of records I was processing to less than 249, and then run
the process several times manually. Its not an acceptable solution, but I
don't have time to resolve it at the moment.

If you find out anything, I'd be grateful for any pointers.

Regards

Vaughan
 
Neither I found a workaround..

I moved away from OOM to accessing items using CDO via a COM wrapper that I
wrote and I am happy there...

Raj
 
Back
Top