Solved

MS Access AddReference over network - DCOM

Posted on 2010-11-09
7
289 Views
Last Modified: 2012-05-10

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

0
Comment
Question by:chascallaway
  • 4
  • 3
7 Comments
 
LVL 16

Accepted Solution

by:
JohnBPrice earned 500 total points
ID: 34096132
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
 
LVL 16

Assisted Solution

by:JohnBPrice
JohnBPrice earned 500 total points
ID: 34096194
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
 
LVL 16

Assisted Solution

by:JohnBPrice
JohnBPrice earned 500 total points
ID: 34096238
0
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 

Author Comment

by:chascallaway
ID: 34099076
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
 

Author Closing Comment

by:chascallaway
ID: 34099084
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
 
LVL 16

Expert Comment

by:JohnBPrice
ID: 34101250
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
 

Author Comment

by:chascallaway
ID: 34103426
Thanks for your help!

Chas Callaway
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

27 Experts available now in Live!

Get 1:1 Help Now