Open RPC channel limit trouble

V

Vaughan

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
 
S

stuartjbray

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.
 
V

Vaughan

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
 
V

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.
 
R

Rajesh CKR

Hi,

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

Vaughan

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
 
R

Rajesh CKR

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top