Function name not found

B

Brian

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and compile
to MDE on the workstation, the MDE works fine, though. My dev workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the workstations
on which it fails is Access 2002 (full version). Here is the error:

The expression you entered has a function name that <my app name> can't find.

How can I locate this? I have error-trapping in every procedure on every
form, and this message is an indication that the error is not being trapped.

I have this startup methodology that provides a little more flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in another
module).

I do have a host of other functions in my app, but this is the most likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on startup.

Any ideas? Or at least how to isolate the issue and why it would occur only
in the MDE?
 
K

Klatuu

It probably is a reference issue. 2003 uses 11.0 libraries and 2002 uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst domain
aggregate function. I am not sure, but I think it is in the DAO library. It
is 3.6 for both Access versions, but I would check the offending Pc's to be
sure they have that DLL and it is in the path specified in the references.
 
B

Brian

Pardon my ignorance here, but shouldn't the MDB use the same references? Does
something happen in the MDE compilation process that disallows the XP machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

Klatuu said:
It probably is a reference issue. 2003 uses 11.0 libraries and 2002 uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst domain
aggregate function. I am not sure, but I think it is in the DAO library. It
is 3.6 for both Access versions, but I would check the offending Pc's to be
sure they have that DLL and it is in the path specified in the references.


Brian said:
I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and compile
to MDE on the workstation, the MDE works fine, though. My dev workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the workstations
on which it fails is Access 2002 (full version). Here is the error:

The expression you entered has a function name that <my app name> can't find.

How can I locate this? I have error-trapping in every procedure on every
form, and this message is an indication that the error is not being trapped.

I have this startup methodology that provides a little more flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in another
module).

I do have a host of other functions in my app, but this is the most likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on startup.

Any ideas? Or at least how to isolate the issue and why it would occur only
in the MDE?
 
D

Douglas J Steele

I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
Pardon my ignorance here, but shouldn't the MDB use the same references? Does
something happen in the MDE compilation process that disallows the XP machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

Klatuu said:
It probably is a reference issue. 2003 uses 11.0 libraries and 2002 uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst domain
aggregate function. I am not sure, but I think it is in the DAO library. It
is 3.6 for both Access versions, but I would check the offending Pc's to be
sure they have that DLL and it is in the path specified in the references.


Brian said:
I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and compile
to MDE on the workstation, the MDE works fine, though. My dev workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the workstations
on which it fails is Access 2002 (full version). Here is the error:

The expression you entered has a function name that <my app name> can't find.

How can I locate this? I have error-trapping in every procedure on every
form, and this message is an indication that the error is not being trapped.

I have this startup methodology that provides a little more flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in another
module).

I do have a host of other functions in my app, but this is the most likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on startup.

Any ideas? Or at least how to isolate the issue and why it would occur only
in the MDE?
 
B

Brian

How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

Douglas J Steele said:
I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
Pardon my ignorance here, but shouldn't the MDB use the same references? Does
something happen in the MDE compilation process that disallows the XP machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

Klatuu said:
It probably is a reference issue. 2003 uses 11.0 libraries and 2002 uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst domain
aggregate function. I am not sure, but I think it is in the DAO library. It
is 3.6 for both Access versions, but I would check the offending Pc's to be
sure they have that DLL and it is in the path specified in the references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and compile
to MDE on the workstation, the MDE works fine, though. My dev workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the workstations
on which it fails is Access 2002 (full version). Here is the error:

The expression you entered has a function name that <my app name> can't find.

How can I locate this? I have error-trapping in every procedure on every
form, and this message is an indication that the error is not being trapped.

I have this startup methodology that provides a little more flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in another
module).

I do have a host of other functions in my app, but this is the most likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on startup.

Any ideas? Or at least how to isolate the issue and why it would occur only
in the MDE?
 
D

Douglas J Steele

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

Douglas J Steele said:
I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the XP machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and 2002 uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst domain
aggregate function. I am not sure, but I think it is in the DAO library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but fails on
two PC's when distributed as an MDE. If I distribute it as an MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the workstations
The expression you entered has a function name that <my app name> can't find.

How can I locate this? I have error-trapping in every procedure on every
form, and this message is an indication that the error is not
being
trapped.
I have this startup methodology that provides a little more flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on startup.

Any ideas? Or at least how to isolate the issue and why it would
occur
only
in the MDE?
 
B

Brian

Good question. Maybe the reference was just set by default or residual from
something earlier in the development process. I don't recall that it was
intentional, but I will have to run the app after removing the reference to
see.

Thanks.

Douglas J Steele said:
Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

Douglas J Steele said:
I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same references?
Does
something happen in the MDE compilation process that disallows the XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are
in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and 2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but
fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
The expression you entered has a function name that <my app name>
can't find.

How can I locate this? I have error-trapping in every procedure on
every
form, and this message is an indication that the error is not being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in
another
module).

I do have a host of other functions in my app, but this is the most
likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on
startup.

Any ideas? Or at least how to isolate the issue and why it would occur
only
in the MDE?
 
B

Brian

On second thought, this is the MS Access Object Library (MSACC.OLB), not the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10 folder
for full versions of Access 2002 or 2000.

Douglas J Steele said:
Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

Douglas J Steele said:
I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same references?
Does
something happen in the MDE compilation process that disallows the XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are
in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and 2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but
fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
The expression you entered has a function name that <my app name>
can't find.

How can I locate this? I have error-trapping in every procedure on
every
form, and this message is an indication that the error is not being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in
another
module).

I do have a host of other functions in my app, but this is the most
likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on
startup.

Any ideas? Or at least how to isolate the issue and why it would occur
only
in the MDE?
 
B

Brian

And, of course, Access will not allow me to remove the reference to the
Access 11.0 Object Library (says it is in use).

Douglas J Steele said:
Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

Douglas J Steele said:
I believe that the problem is that while Access is capable of handling
certain Reference changes from version to version in MDBs, it can't in MDEs.

You can use code like the following to check the references in another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application on their
platform before distributing to them. Look into something like Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same references?
Does
something happen in the MDE compilation process that disallows the XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the DLLs are
in
the correct paths. The ONLY difference is the Office 10/Office 11 path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and 2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but but
fails on
two PC's when distributed as an MDE. If I distribute it as an MDB and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
The expression you entered has a function name that <my app name>
can't find.

How can I locate this? I have error-trapping in every procedure on
every
form, and this message is an indication that the error is not being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength are all
public variables declared (one in in this module and the other two in
another
module).

I do have a host of other functions in my app, but this is the most
likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs on
startup.

Any ideas? Or at least how to isolate the issue and why it would occur
only
in the MDE?
 
D

Douglas J. Steele

MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


Brian said:
On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

Douglas J Steele said:
Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
How would you recommend distributing an Access app, then, to customers that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for those
customers whose systems I manage, but I don't really want to distribute the
app to unknown customers that way when it is is easy to re-enable the bypass
key (as you are well aware, there are several tools out there that make this
quite easy).

So, I thought I would just use an MDE. For those clients not having Access,
I can distribute the runtime 2003, but now I'm stuck with the current problem
for those customers who already have a version of Access. The app works fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different platform
that you use, you really should be at least testing the application
on their
platform before distributing to them. Look into something like
Virtual PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue, so I
installed Office XP SP3, and now the MDE says the DB is in an unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003 format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path for
the MS Access 10.0/11.0 Object Library, which appears correctly on each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are all
public variables declared (one in in this module and the other
two in
another
module).

I do have a host of other functions in my app, but this is the most
likely
candidate because, although my login form does call a couple of other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would occur
only
in the MDE?
 
B

Brian

OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

Douglas J. Steele said:
MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


Brian said:
On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

Douglas J Steele said:
Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are
all
public variables declared (one in in this module and the other
two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of
other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would
occur
only
in the MDE?
 
D

Douglas J Steele

I'd suggest asking this in one of the newsgroups related to the Developer
tool kits (microsoft.public.access.developers.toolkitode or
microsoft.public.access.devtoolkits).

If you can't get to them through Microsoft's web interface, you can use
Google Groups, or use a newsreader connected to msnews.microsoft.com

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Brian said:
OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

Douglas J. Steele said:
MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


Brian said:
On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

:

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are
all
public variables declared (one in in this module and the other
two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of
other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would
occur
only
in the MDE?
 
R

RD

I have found it very common on the internet for a site to ask what OS I'm
running before I download.

Why not for Access?


OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

Douglas J. Steele said:
MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


Brian said:
On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

:

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are
all
public variables declared (one in in this module and the other
two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of
other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would
occur
only
in the MDE?
 
B

Brian

Yes. I take back the comment about the OS. However, I have two complications:

1. This is a multi-user application that may be distributed in networks that
include some Access XP & 2003 workstations as well as some that use the
Access 2003 runtime that I provide. It seems like a lot of overhead to have
to distribute multiple versions of my app in such a scenario, especially when
distributing updates to the client.
2. I am working off a single development workstation that will not allow me
to compile a 2002/XP MDE's because I have Access 2003 & VB tools installed
(file format is shown as XP/2003). Will it work for me to install both Office
XP Pro and Office 2003 Pro on the same workstation just to accomodate the
distribution needs?

Now, if I knew for sure that I could distribute Access 2003 runtime safely
to all Access XP Pro clients, I would have no problem here, but I have not
seen anything close to a definitive answer to that in the forums.

It seems that the more development I do, the more time I have to spend
babysitting program versions and application limitations and the less time I
spend actually working on content-related programming and reporting for the
end-user.

RD said:
I have found it very common on the internet for a site to ask what OS I'm
running before I download.

Why not for Access?


OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

Douglas J. Steele said:
MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

:

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are
all
public variables declared (one in in this module and the other
two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of
other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would
occur
only
in the MDE?
 
R

RD

Given an environment like that I think I would not try to distribute an Access
application. I would migrate my work over to VB6 with a MDSE or SQL Server 2005
Express back end.
http://msdn.microsoft.com/vbrun/vbfusion/usingsqlexpress/

Good luck,
RD


Yes. I take back the comment about the OS. However, I have two complications:

1. This is a multi-user application that may be distributed in networks that
include some Access XP & 2003 workstations as well as some that use the
Access 2003 runtime that I provide. It seems like a lot of overhead to have
to distribute multiple versions of my app in such a scenario, especially when
distributing updates to the client.
2. I am working off a single development workstation that will not allow me
to compile a 2002/XP MDE's because I have Access 2003 & VB tools installed
(file format is shown as XP/2003). Will it work for me to install both Office
XP Pro and Office 2003 Pro on the same workstation just to accomodate the
distribution needs?

Now, if I knew for sure that I could distribute Access 2003 runtime safely
to all Access XP Pro clients, I would have no problem here, but I have not
seen anything close to a definitive answer to that in the forums.

It seems that the more development I do, the more time I have to spend
babysitting program versions and application limitations and the less time I
spend actually working on content-related programming and reporting for the
end-user.

RD said:
I have found it very common on the internet for a site to ask what OS I'm
running before I download.

Why not for Access?


OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

:

MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

:

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
End Function

The three variables, DataFileName, DemoVersion, and DemoLength
are
all
public variables declared (one in in this module and the other
two
in
another
module).

I do have a host of other functions in my app, but this is the
most
likely
candidate because, although my login form does call a couple of
other
functions from other modules, this is the first one that runs
on
startup.

Any ideas? Or at least how to isolate the issue and why it
would
occur
only
in the MDE?
 
B

Brian

That's kind of what I have been dreading. I spend hundreds of hours
developing a big app in Access, and now that more clients want it, I find out
that Access lacks the flexibility to be a truly viable option, but I simply
do not have time to rewrite the entire thing in VBA and migrate over the
existing clients.

Access just saves me so much development time...

RD said:
Given an environment like that I think I would not try to distribute an Access
application. I would migrate my work over to VB6 with a MDSE or SQL Server 2005
Express back end.
http://msdn.microsoft.com/vbrun/vbfusion/usingsqlexpress/

Good luck,
RD


Yes. I take back the comment about the OS. However, I have two complications:

1. This is a multi-user application that may be distributed in networks that
include some Access XP & 2003 workstations as well as some that use the
Access 2003 runtime that I provide. It seems like a lot of overhead to have
to distribute multiple versions of my app in such a scenario, especially when
distributing updates to the client.
2. I am working off a single development workstation that will not allow me
to compile a 2002/XP MDE's because I have Access 2003 & VB tools installed
(file format is shown as XP/2003). Will it work for me to install both Office
XP Pro and Office 2003 Pro on the same workstation just to accomodate the
distribution needs?

Now, if I knew for sure that I could distribute Access 2003 runtime safely
to all Access XP Pro clients, I would have no problem here, but I have not
seen anything close to a definitive answer to that in the forums.

It seems that the more development I do, the more time I have to spend
babysitting program versions and application limitations and the less time I
spend actually working on content-related programming and reporting for the
end-user.

RD said:
I have found it very common on the internet for a site to ask what OS I'm
running before I download.

Why not for Access?


OK. So I am trying to do two things:

1. Protect my application. Any way other than MDE to keep the 99% of casual
pirates out? Never mind the other 1% that are serious hackers; if I plan for
them, I will never get a product to market.
2. Make installation as intuitive as possible for the customer. If I were
the customer purchasing an application online, I would personally feel that
its presentation is far from professional if I had to tell the programmer
what version of Access I had before I could download my copy. Is it feasible
to simply push out an Access 2003 runtime with EVERY implementation, or will
this mess up existing settings or file associations when installed on systems
that have Access 2000 or 2002 full version installed? Could I even guarantee
that the runtime would be used for my app if I did it this way? (Yes, I do
have the VB Tools for Office and thus the developer tools).

Thanks again.

:

MDEs aren't as forgiving as MDBs. You may have to produce a separate MDE for
each version of Access you're supporting.

--
Doug Steele, Microsoft Access MVP

(no private e-mails, please)


On second thought, this is the MS Access Object Library (MSACC.OLB), not
the
generic Office 11.0 Object Library. Pardon my ignorance here, but isn't
the
Access Object Library rather fundamental to a lot of things that happen in
Access?

By default, this resides in the C:\Program FIles\Microsoft Office\OFFICE11
folder for Access 2003, including the runtime, but in the ...Office10
folder
for full versions of Access 2002 or 2000.

:

Why are you including the Office reference? Do you really need it?

Depending on what you're doing, you may be able to use Late Binding, and
eliminate the need for the reference, thus eliminating your problem.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


How would you recommend distributing an Access app, then, to customers
that
are casual canned-software-only customers? I have an app that has just
outgrown my local client base; I have a significant number of potential
customers asking how they can purchase it, and they may well want to
buy
it
"off the shelf" with no involvement of mine on their systems. I suppose
that's a good problem to have, but I need to ensure that I don't lose
control
of the security of my code anywhere along the way.

To this point, I have been simply setting AllowBypassKey to False for
those
customers whose systems I manage, but I don't really want to distribute
the
app to unknown customers that way when it is is easy to re-enable the
bypass
key (as you are well aware, there are several tools out there that make
this
quite easy).

So, I thought I would just use an MDE. For those clients not having
Access,
I can distribute the runtime 2003, but now I'm stuck with the current
problem
for those customers who already have a version of Access. The app works
fine
with anything 2000 or newer, except for this reference.

:

I believe that the problem is that while Access is capable of
handling
certain Reference changes from version to version in MDBs, it can't
in
MDEs.

You can use code like the following to check the references in
another
database:

Sub ListReferences()
Dim appAccess As Access.Application
Dim refCurr As Reference
Dim strDatabase As String

strDatabase = "full path to database"
Set appAccess = New Access.Application
appAccess.OpenCurrentDatabase strDatabase
For Each refCurr In appAccess.References
If refCurr.IsBroken = False Then
Debug.Print refCurr.Name & _
" (" & refCurr.Major & "." & refCurr.Minor & ")"
Else
Debug.Print "Broken reference: " & refCurr.Guid
End If
Next refCurr
appAccess.CloseCurrentDatabase
Set appAccess = Nothing

End Sub


If you're distributing to customers who are running on a different
platform
that you use, you really should be at least testing the application
on
their
platform before distributing to them. Look into something like
Virtual
PC or
VMWare to eliminate the need for multiple pieces of hardware.

--
Doug Steele, Microsoft Access MVP

(no e-mails, please!)


Pardon my ignorance here, but shouldn't the MDB use the same
references?
Does
something happen in the MDE compilation process that disallows the
XP
machine
to use its own references as it would when using the MDB?

Before I saw your reply, I thought it might be a service pack
issue,
so I
installed Office XP SP3, and now the MDE says the DB is in an
unrecognized
format (MDB is still fine) on the affected PC. This was in XP/2003
format
and
compiled to MDE on my dev PC. I copied the MDB and compiled the MDE
on
the
target PC, and it is just fine.

I just checked the references on the dev & target PC's, and the
DLLs
are
in
the correct paths. The ONLY difference is the Office 10/Office 11
path
for
the MS Access 10.0/11.0 Object Library, which appears correctly on
each PC
when I open the MDB. Is there a way to check the pre-compiled MDE
reference
on the target PC?

Just a note on Access: it is very frustrating spending hundreds of
hours
developing an app like this, only to wind up with clients saying it
doesn't
work due to some Access platform issue entirely unrelated to all my
hard
work...

Thanks.

:

It probably is a reference issue. 2003 uses 11.0 libraries and
2002
uses 10.0
One the offending machine, install the mbd open VBA editor, check
Tools,
References. See if any are missing.

Here is a site that may be useful:
http://support.microsoft.com/default.aspx?scid=kb;en-us;283115

Also, you did not say where the error occured. Have you tried
stepping
through in Debug mode to see if you can tell where it fails?

Looking at you Startup function, the first thing I see is a
DFirst
domain
aggregate function. I am not sure, but I think it is in the DAO
library. It
is 3.6 for both Access versions, but I would check the offending
Pc's to
be
sure they have that DLL and it is in the path specified in the
references.


:

I have an FE/BE app that works fine on all PC's & a terminal
server (a
mixture of Access and Access runtime) when run as an MDB, but
but
fails on
two PC's when distributed as an MDE. If I distribute it as an
MDB
and
compile
to MDE on the workstation, the MDE works fine, though. My dev
workstation is
Access 2003 (Office Pro with VB Tools), and at least one of the
workstations
on which it fails is Access 2002 (full version). Here is the
error:

The expression you entered has a function name that <my app
name>
can't find.

How can I locate this? I have error-trapping in every procedure
on
every
form, and this message is an indication that the error is not
being
trapped.

I have this startup methodology that provides a little more
flexibility than
using startup options to open a form:

AutoExec Macro: RunCode - Function Startup()

The Startup function is in a standalone module (i.e. not behind
a
form)

Function Startup()
DataFileName = DFirst("[DataFileName]", "[Version]")
DemoVersion = False
DemoLength = 30
DoCmd.OpenForm "Login"
 

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