=?Utf-8?B?UmljaGFyZCBCb25vbW8=?=
"Error accessing file. Network connection may have been lost."
(This is with a file on the local HD.)
Then that's very clearly the vbe6.dll corruption issue and can be
fixed by following the instructions in this KB article:
http://support.microsoft.com/kb/304548
You, in fact, supplied that URL in an earlier post, and that's the
cause of this problem. It was fixed in the first Office 2000 service
pack. If you can't apply SP3
There is a KB article which speaks of this, and it is referenced
on the web site
you give below as well. However, I do not think we have the
version of vbe6.dll
that the article references, nor does it seem that anyone (so
far) has done the
things associated with causing this particular error. The
symptoms are the same, but the cause may be different.
What versions of Access do you have?
I've never seen this error in any case but where things were as
described in that article.
And this kind of corruption will absolutely *not* be fixable by
poking into the MDB file structure, as this corruption concerns the
Access project, which is an internal structure stored in a BLOB
field of a system table. It's structure is going to be completely
different depending on your Access project.
By chance does is the database set to COMPACT ON CLOSE? If so, TURN
THAT OFF. It's a useless setting that is very dangerous (since it's
not cancellable).
Quick recovery from the problem until you solve it would be as
simple as keeping a reference copy of the MDB and copying it over
top of the corrupted one. You could also do Application.SaveAsText
(as described in the KB article) and re-import into a new MDB to
replace the corrupted one.
[]
Well, I started that process before pursuing this. The sad fact
is that removing the cause is not entirely in our control. I, for
example, indicated that we should make sure that all of our
workstations has Office SP-3 installed,
among other things. We've notified our central IT folks of this
and we are waiting
on them. It is not clear when they will get around to this or
when they will give their blessing to our doing it ourselves.
Have the app check on open if it's the correct version of Access and
close if it's not.
It is easy to say "find and fix the cause," (and it is what must
be done of course),
but that does not magically put me/us in a position to do so, at
least not in a timely fashion.
You're not going to solve this problem by the method you're
pursuing. It's only going to be solved by fixing the problem. If
your IT department can't get properly patched versions of software
on your desktops, then you need to talk to your direct supervisor to
go up the chain of command to get somebody to force IT to start
doing their jobs.
[]
I am assuming that the bytes in question -- if they exist -- are
somehow findable. They must be, as people obviously write
software which uses them or the equivalent.
The error message you're getting is Access telling you that it can't
read them any more. That means that the pointers are so corrupted
that it's not fixable. So, you're absolutely *not* going to be able
to fix this manually.
I AM assuming, for the moment, that the corruption is the same for
this particular
problem. It may be true, it may be false. It should be testable.
I have concluded that you're absolutely wasting your time.
It's too bad Peter Miller doesn't read these newsgroups any more, as
he is the primary expert on the Jet file format outside of
Microsoft. He'd probably be able to explain definitively why your
approach will never work.
That may well be. I am sure that my ignorance of the internal
structure of MS Access / Jet 4 databases leads to a certain
naivete. Things may well work in a way which has no resemblance
to what I suspect. I am aware of that possibility (or
probability).
What you need is not the structure of Jet, but the structure of
Access structures. And those are stored in a BLOB field in a system
table, whose structure is completely unknown to Jet.
Perhaps not. I do not know the extend of confidentiality with the
proprietary formats. I know that no-one can provide me a complete
description without my signing an NDA (which I'd be willing to
do). (I have also had other vendors
provide me with proprietary information on request to solve
problems at other times.) However, it is not obvious to me that
MS or even a 3rd party could not
reveal to me that "the path-defining variable you seek is
typically located on Access page of type X, buried somewhere in a
record type of Y, preceded by bytes xx xx xx." The only way to
know for sure is to ask.
The answer is going to be that there *isn't* any such set of bytes,
as if there were, the databases corrupted in this fashion would be
easily recoverable. The KB article explains that the VBA projects
are lost as soon as you encounter this error, so that means there
isn't any set of bytes that is resettable to recover the VBA
project.
Eventually. As I noted, though, this is not under my/our control.
Until your company's management can whip the IT department into
shape, this is what I'd do:
1. implement tracking of user logons and logouts into the MDB, and
their version of Access and Jet. This way, you can tell who is
corrupting the database, and visit their workstation yourself to
upgrade them to a safe version of Access.
2. in your app, check the Access version and if it's not SR1 or
later, tell the user their Access installation needs to be patched
and kick them out of the database.
3. give a copy of the MDB to each user, and never have more than one
user in the MDB at a time.
4. if the user's copy gets corrupted, just copy a fresh one over top
of the corrupted MDB.
You could really control this by changing the structure to open a
"launcher" MDB that would do all the checking for you and only then
launch the actual app. This would be something like:
A. check the version of Access. If not SR1 or greater, inform the
user and exit.
B. if the A. test is passed, check to see if there's an unlogged-out
entry for the app for the current user. This would tend to indicate
a corruption. If there is, download a new copy of the front end. If
not, go to C.
C. launch the app.
This would give you complete control. If you make the launcher an
MDE, it should be pretty safe. In fact, an MDE may protect you from
the original problem, as I think it involves the code project, not
the compiled code.