MS Access AddReference over network - DCOM


The code below attempts to start a VB created application called Entry with a SetID class and Function by the same name.  It works as long as it is run on the local machine, but I also want it to run over a network path - and run the Entry app from the remote machine.  This is where it fails.

In spite of the fact that the GetDBPath  Function gets the remote network path, the References.AddFromFile call adds the reference from the local DB path, if the file exists.  If it does, it runs it from the local machine.  If it does not exist, the CreateObject("Entry.SetID") call fails.

In addition, I cannot successfully add a reference in Access VBA (Tools/References...) to this remote network 'Entry.exe' at all.  It simply does not add it, with no messages as to why.

The local machine has full rights to the remote machine as well as launch, etc. permission in dcomcnfg.  I also checked 'Allow Trusted Locations on my network' in the MS Access Trust Center.

Thanks

Chas Callaway
Private Sub cmdEntry_Click()
  On Error GoTo exitcmdEntry
  Dim EntryID As Object
  Dim VBReferens As Reference
  Dim msg As String

	'look for an "Entry" reference and remove it
  For Each VBReferens In References
    If VBReferens.Name = "Entry" Then References.Remove VBReferens
  Next VBReferens
  msg = "AddFromFile"

  	'Add reference from to 'Entry.exe" from the file location of the database
  References.AddFromFile GetDBPath & "Entry.exe"
  msg = "Set EntryID"
	'start 'Entry.exe'
	'if the file does not exist locally, this fails, even if the location is over the network
  Set EntryID = CreateObject("Entry.SetID")
  Dim dbs As Database
  Dim rs As Recordset
  Set dbs = CurrentDb
  Set rs = Me.Recordset
  'Call the EntryID.SetID Function
  EntryID.SetID rs("Entry ID")
  Set rs = Nothing
  Set dbs = Nothing
	'look for an "Entry" reference and remove it
  For Each VBReferens In References
    If VBReferens.Name = "Entry" Then References.Remove VBReferens
  Next VBReferens
  Exit Sub
exitcmdEntry:
  MsgBox msg & "-" & Err.Description
End Sub

Public Function GetDBPath() As String
  GetDBPath = CurrentProject.Path & "\"
End Function

Open in new window

chascallawayAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
JohnBPriceConnect With a Mentor Commented:
There are two ways to do this,

1) you can explicitly use it over the network by using
Set EntryID = CreateObject("Entry.SetID", "Machine") BUT you cannot add a reference into your design time

2) You can add a reference to DCOM on the client that says "Entry" is on this other machine,
and then you can reference it AND use it as if it were local

0
 
JohnBPriceConnect With a Mentor Commented:
For 2), you need to compile Entry.exe and get the .tlb file for it.  The .tlb defines the public interface that the exe supports.  You must also muck with dcomcnfg to point things to the right places and with the right security.

see http://support.microsoft.com/kb/268550

see also for issues with service packs
http://support.microsoft.com/kb/892500
0
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
chascallawayAuthor Commented:
John:

Thanks for the prompt reply.  The help I have gotten from Experts Exchange has been invaluable.

The link to a proper DCOM configuration was helpful.  I'm sure that I had DCOM comfigured incorrectly, but this was not enough.  I did successfully add a reference at design time, even after deleting (moving) the .tlb file.

In addition to a likely DCOM configuration, the problem turned out to be that this code:
Set EntryID = CreateObject("Entry.SetID")
was first wrong because it will always try to connect to the local machine.  I totally ignores the path in the reference to 'Entry' unless the machine name is included, like this:
Set EntryID = CreateObject("Entry.SetID","MachineName")
However, this also fails, so I tried some code I had used in a different DCOM application:
Set EntryID = New Entry.SetID
This works and respects the path created for 'Entry' with:
References.AddFromFile GetDBPath & "Entry.exe"

If I could code the DCOM configuration, this would be operator agnostic.

Many thanks for your help.

Consider the case closed.

Chas Callaway
0
 
chascallawayAuthor Commented:
Set EntryID = CreateObject("Entry.SetID","MachineName")
However, this also fails, so I tried some code I had used in a different DCOM application:
Set EntryID = New Entry.SetID
0
 
JohnBPriceCommented:
Set EntryID = New Entry.SetID works if you have a valid reference (and it makes coding a lot easier.  Create Object should work, but you may still have to adjust the DCOM stuff to get the right permissions on server and client.

cheers.
0
 
chascallawayAuthor Commented:
Thanks for your help!

Chas Callaway
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.