Tim Churches wrote:
>However, there was a big stink a few years ago when someone claimed they
>had discovered a fundamental flaw in the Jet database engine, which is
>what MS Access uses for its storage. It turned out that the "problem"
>was caused by the programmers in question treating the Jet engine as if
>it were a much simpler dBase-style ISAM data store and thus assuming
>that records would always be in the same order as they were when they
>were added. In fact, the Jet engine is much more sophisticated than that
>and it constantly re-organises records internally - it only guarantees
>that results obtained via SQL statements will be correct - if you bypass
>SQL you might be surprised.
>
The problem is that Access messes up references ("foreign keys"). I
wrote a quite extensive system for our surgical department 5 years ago.
It kept track of all procedures performed, associated codes (ICD,
procedural codes, outcome codes, procedure log for surgeons in training,
complications registry etc.) To my dismay, once we had a sizeable
database, it did not seem to count my procedures correctly. I had
estimated that I already had done all hernias required for my traiing,
but the database suggested far less.
After extensive debugging and creating large regression test databases
we found out that you can quite predictably mess up references simply by
crashing the system while entering data. Apparently, Access is/was not
capable of rolling back transactions correctly and allocated foreign
keys fairly randomly after a crash without complaining; even more
surprising was our finding that even "old" record sets that were NOT
used at the time of the crash could be corrupted that way.
Following our own testing, trawling the web for similar experiences
yielded enough links to make us stop using Access forever. Haven't
touched it since. We referred to Access as the "data lottery system".
Pity, as I was very fond of the user interface and the ease of producing
user interfaces to a database.
>Thus, I suspect that the problem related in this story, if true, is
>caused by the programmers doing a join between tables using direct
>programmatic access to the Jet tables and bypassing the SQL interface. I
>dimly recall a note in a Microsoft knowledgebase about this very issue.
>
All our joins were created "visually" using the tools provided by
Access. These visual tools produce SQL statements. Whether they were
used internally, I do not know.
Horst