How Do I Make Sense of Microsoft Access? 100
Anthony Boyd asks: "I have a pretty good tool-set for LAMP work, but as I get into Microsoft jobs, I've started to wonder if I'm working with the best tools. In particular, I'm exploring an 'out of control' Microsoft Access setup, which has about 200 tables in 30 .mdb files, including some duplicated/outdated tables. I'd like to print the properties of each table (with the comments for each field), print the table list for each database, get info on the field types & relationships, and so forth. What tools do you suggest for trying to grok a large Access mess?"
Access Has You Covered (Score:5, Informative)
Tools (Score:5, Funny)
Coffee. Lots of coffee, and ignorance. It's bliss, or so I've heard.
Re:Tools (Score:2, Funny)
With two lumps of LSD.
KFG
Re:Tools (Score:4, Funny)
Re:Tools (Score:3, Funny)
Re:Tools (Score:2)
Apparently there's not enough coffee being served to the MS developers, then.
SB
Re:Tools (Score:4, Insightful)
Set the wayback machine to Access 1.0 and you'll find me working at a Software Etc. back in college. We got, and sold, 12 copies of Access 1.0. All twelve came back from customers complaining that the program was uselessly buggy.
Wind forward a bit to Access 97. I'm a sysadmin for... well, a company using a lot of Filemaker 3 databases (my first task there was finishing the FMP 2->3 migration). We were looking to migrate off of Filemaker (it wasn't a Microsoft product; just don't ask me about that manager - I have no idea how he got out of there without being charged with embezzling for kickbacks from the consultant he was partnered with immediately prior to joining our company). One candidate to replace Filemaker for production databases with 50 users, 250,000+ records and 2 or 3 people running reports was Access 97 (the other two were CRM products, one from a company that later ran Superbowl ads and the other from a company later acquired by Nortel; and no, management didn't select the company that survived). Our lead FMP developer managed to stretch the Access97 evaluation out to a full hour before he deleted every table in his test implementation without recovery, undo, or prompt. End of evaluation.
So I've seen two versions of Access in business situations. Microsoft usually gets things right in the third version. For Access, you have to start counting with Access 2000 - if that version was useful.
How you handle it is to document the functionality and re-implement the application in something else.
Re:Tools (Score:3, Insightful)
Re:Tools (Score:3, Interesting)
Horrible database, yes... (Score:2)
The rest of it looks relatively simple and easy-to-use but is ever-so-prone to making exactly the kinds of spaghetti-farms which the OP is asking about.
AFAICT, those spaghetti-farms are a lock-in policy done with more stealth than is usual for MS. It's likely that the cheapest, most effective answer for anything beyond an instant fix is the total rewrite (in something standard and comprehensible).
Re:Tools (Score:2)
Access isn't the greatest thing on the planet. However, if you unreasonably expect your database to hold your hand while managing tables... I have some bad news for you!
DELETE FROM MY_TABLE;
DROP TABLE MY_TABLE;
Where did my table go! Johnny your table has gone to a better place, a happier place.
Re:Tools (Score:1)
Yes, coffee!
And pencil and paper and very big pink eraser!
Re:Tools (Score:3, Funny)
Re:Tools (Score:1)
Ssshhhhhhhh!
If you make too much of fuss, everyone will know!
Re:Tools (Score:3)
Re:Tools - Pan Galactic Gargle Blaster (Score:2)
IMHO (Score:3, Interesting)
Re:IMHO (Score:2)
The 'L' in 'LAMP' stands for Linux, (GNU/)Linux, Apache, MySQL, PHP.
Re:IMHO (Score:2)
Re:IMHO (Score:3, Informative)
Re:IMHO (Score:2)
Just like VB, Access isn't meant to be used for 'Real' applications.
It's a great rapid prototyping tool, and I actually use it fairly often for small databases, or when I need to hammer out a small set of code very quickly that onl needs to run properly once.
Once you get into a large multi-user database, Access is pretty bad. But that's because it's the wrong tool for the job. If the database has grown this large, it's probably time to rewrite/modify the application
Re:IMHO (Score:2)
Re:IMHO (Score:2)
I mean, if one language is as usable as another for real applications simply because they run on the same platform, then why not program raw assembly -- or raw CIL if you like
Or does it just have a bad rap because of a quick learning curve? Well, if that's the case, why hasn't Ruby gotten the same reputation? Why is it that the only complaint most people can find about Ruby is that it's a bit overhyped and dog-sl
Re:IMHO (Score:2)
About half of my job requires programming in Java which is, IMNSHO, the worst programming language evar (except maybe COBOL). If I can deal with that, ForTran would be no problem.
As far as the capabilities of VB, I haven't used it for a long time but it was pretty powerful and had the virtue of some pretty in-depth help files. I got started programming (professionally) with Access and VBA in the ante
Re:IMHO (Score:2)
Have you actually used COBOL in a production environment, or are you just spouting elitist CompSci blather?
Re:IMHO (Score:1)
Re:IMHO (Score:2)
I know, I know. Still, shining the light of critical thought onto Wrong Conventional Wisdom is always a Good Thing.
Re:IMHO (Score:2)
I feel your pain. Then again, my job involves mostly programming in PHP. PHP 4.
Re:IMHO (Score:2)
That's not a valid comparison, all
It's just that BASIC is designed for the beginning programmer and C# for the more advanced.
Re:IMHO (Score:2)
(1) Fortran and C and a metric shitload of other languages all compile to machine code.
.NET languages compile to the CLR.
(2) All
Are you sure that (1) means that the languages can have different capabilities while (2) means those languages all have the same capabilities?
Re:IMHO (Score:1)
It is being misused (Score:5, Insightful)
Re:It is being misused (Score:2)
TOAD, definitely. (Score:4, Informative)
I've heard it's a fairly expensive piece of software, but thankfully I don't pay for it. It might be tough to get your PHB to spring for it, if that's actually the case...but I've yet to use or even hear of a better way to work with really complex DB systems.
Re:Tora, not Toad. (Score:2, Informative)
Free
Cross Platform
Open Source
supports Multiple Databases
Really quite a nice application.
Some suggestions from an Access geek (Score:5, Informative)
I'm going to assume you've got Access 2003, because I can't remember what they changed from 2000 anymore :-)
The Microsoft Access Conversion Toolkit will give you some of the information you want, and can be used to query MDBs network-wide. If you just need to figure out the mess of a single chosen database, start using the built-in features of Access. Check the relationships and see if anything has been diagrammed out for you. If it has, then you have the ERD ready. If not, have fun figuring it out... Use the stuff in 'Tools->Analyze' to get more property and design information. Try right-clicking on a table/query/form/report and selecting 'Object Dependencies'. This will allow you to see what requires it to work, as well as what the object depends on. Lastly, I just start working through the code/macros (yuck). The object dependencies stuff won't check macros or VBA, so you have to check manually. Sometimes you'll find DAO/ADO code opening connections programmatically.
Best of luck to you! This will suck badly, in case you didn't figure that out already. Access provides an upsizing wizard that can help you upload your data to an MS-SQL server, but that will require you debug (ADP as frontend) / rewrite (VB.NET) the forms and stuff.
Despite what people say, Access does allow for security rights. However, it is not linked in any way to the machine or Active Directory. You use a modified shortcut to load the database with a security file. It works alright for most things, but there is no record-level security, and it sucks when you have 20 people signed in and you have to update the file. Also, supposedly there are cracks that break that security.
This all leads me to my next point for all who read: DO NOT USE ACCESS AS AN ENTERPRISE-LEVEL / MISSION CRITICAL DATABASE SUITE. Pay for a decent tool/programmer/dba/whatever if you really like your data. This application is just for personal / small-group data storage. There is a reason it comes with Office, and not SQL Server. Thank you.
Re:Some suggestions from an Access geek (Score:3, Insightful)
NEVER, EVER, EVER use an Access database as a backend to a server. It's just asking for trouble.
Unfortunately I get the feeling that a lot of these Access overusage problems stem from man
Re:Some suggestions from an Access geek (Score:2)
Re:Some suggestions from an Access geek (Score:1, Informative)
I agree with your comments about Access not being good for a backend under any decent load. The problem ultimately is one of scalability. The only way up is to use the upsizing wizard and place the data into your SQL server. This requires you convert to an Access Project (ADP), or to rewrite your app. Why VB.NET cannot convert your VBA into an executable is beyond me. Also, Access 2003 does not work right with SQL Server Express. You have to have MSDE/SQL2000 to fully work. Unacceptable in my opinio
Re:Some suggestions from an Access geek (Score:2)
Re:Some suggestions from an Access geek (Score:2)
Re:Some suggestions from an Access geek (Score:2)
Maybe even if there were some more prominent free tools to convert Access databases to other RDBMSes it would help.
Re:Some suggestions from an Access geek (Score:2)
Re:Some suggestions from an Access geek (Score:1)
Or export the meta-table data into a meta-meta-table and have all your information in one place. I think that's the route that I'd pursue.
Working with system tables is fun! (he says, after trying
Re:Learn VBA... (Score:1)
I wrote my own documenter in VBA that writes the output to Excel sheets. Almost all the info you need is in the TableDef(s) objects. Documenter kinda either lacks detals, or, write a lot of junk you don't need. I'm not sure if M$ releas
Re:Learn VBA... (Score:2)
I hate myself every time I do that. Filthy betrayal of all I claim to stand for. But I keep on doing it.
(it's dangerous, Access love requerying to refresh the screen).
Oh hell yeah. Scrolling up and down the query output window when you've created some hybrid SQL / VBA atrocity can be so very much fun :-)
Documenter is an ugly report (Score:3, Informative)
On the menu, pull up Tools, Analyzer, Documenter, and pick your criteria. Access is clumsy and not secure, but it's also what most organizations have. That doesn't keep the rest of us from attempting to subvert from within...
To consolidate the duplicate tables, build a query that replicates grep and/or another that replicates diff, and have fun from there. Somehow I'm sure that you know how to do this.
Even though I prefer to work with other platforms and venues, my Access skills have managed to keep me employed and the cats fed while I decide what to do next with my life.
having taken a course in access (Score:1, Redundant)
Take two and call me in the morning. (Score:1, Redundant)
"What tools do you suggest for trying to grok a large Access mess?"
A bottle of whiskey and a bottle of wine. Good luck.
Learn Visual Basic (Score:3, Informative)
MS Access has a large community online, especially comp.databases.ms-access [oreilly.com]. Google is your friend - just about everything you'll ever want to do has already been done and has VB code examples online.
Here is a thread that has code demonstrating how to dump the contents of an Access database as DDL into text files:
comp.databases.ms-access: Exporting jet table metadata as text? [google.com]
PS - If you are impatient with the limitations of VBA (aka "VB Classic"), there are Microsoft Office interop libraries that will let you automate Access Databases in
Visio (Score:5, Interesting)
Access is frequently abused in the way you describe. Companies that have Office licenses often restrict distribution of the Access component, even if they are otherwise entitled to it, because of such abuse. Access is a very handy tool for a quick-and-dirty database design, so people use it for that - a lot. Pretty soon, you have little information islands all over the place, designed by amatuer DBAs, and containing gobs of misplaced but critical business data. I believe it is all another Nefarious Microsoft Plot (NGP) because when you switch to the solution for cleaning it all up - SQL server - your need for the software is so severe that you won't kick about the price, and expectations for performance are so low that SQL server easily passes muster. Of course, that's just the snide opinion of Yet Another Microsoft Detractor. 8)
Re:Visio (Score:2)
It used to be called MSDE (Microsoft Data Engine), and it has since been renamed SQL Express. Yes, it is not a full fledged version of SQL; however, the features that are missing are not features that would have been used by anyone considering Access in the first place. The main detractor was that MSDE never had any of the management tool
Re:Visio (Score:2)
Re:Visio (Score:2)
So can Access! Create a table (rows 1,000 columns 1,000) and map 1 for black 0 for grey and no value for white... it's an ideal way to store your pictures in the database!
Re:Visio (Score:1)
No you just have to create a second table with the same keys and join them. Viola 510 (minus your key fields) available fields.
I've seen it done.
A more elegant solution would be to have three tables X, Y, and Pixel.
Access and users who abuse it (Score:2)
The guy who wrote it didn't have a clue -- he ties fields directly to the DB (using the DB controls), so there's no transactions, you can't undo, you can't say, "No I didn't mean that... cancel".
On top of that, the guy couldn't design a UI to save his life, so users are continually corrupting the database, overwriting records when they mean to create new ones, etc.. And no, w
Re:Visio (Score:2)
The MySQL database driver (MyODBC) has had problems with development for a LONG time. It seems to be moving along slowly again now, but keep in mind that it has basically been on the same version forever.
Additionally, there are other problems. For example, if there is even a small error, everything falls over. The Access process has to be killed using Task Manager... hardly an optimal solution for a workplace filled with
I know this is easier said than done, but (Score:3)
Do it NOW.
When your employer wakes up and decides not to remain with that closed proprietary bug ridden M$ stuff, they'll thank you profusely. Or they'll fire you and you'll come to my employer for a job and get hired right in.
ADO OpenSchema? (Score:3, Interesting)
What tools? (Score:5, Funny)
Re:What tools? (Score:1)
What i mean is that the database is probably non-normalized, so any change might make the db inconsist. There are probably lots of functions on the leaf level with duplicated code, which ofcourse have slight differences to fix bugs due to prev
Access != Good && Access Enterprice Apps (Score:2, Interesting)
Re:Access != Good && Access Enterprice App (Score:2)
Re:Access != Good && Access Enterprice App (Score:3, Informative)
I went so far as to write a script to detect when the database has been corrupted by attempting to open it and checking the error message if it can't, and automatically backup and repair it using jetcomp. Our corruption problem finally went away when I f
Re:Access != Good && Access Enterprice App (Score:1)
Get the data out of Access and into MDBE now. (Score:1)
It's a common compromise in your situation.
You have too much code in the MDB to just dump it. But the Jet database just blows for anything but single user with a rock solid connection to storage.
You already own the MDBE (or SQL express or whatever it's called now). Use the upsizing wizard to move the data out of the MDB to an instance of MDBE, touch the login code (think about roles, don't give the access client code admin on the database), debug the things that break. Most things should work (poorly)
Re:Get the data out of Access and into MDBE now. (Score:1)
In one of my courses... (Score:2, Interesting)
The course was taught by "the new guy" who was a *NIX person (of course he got to teach the M$ classes and not the *NIX classes which would have made sense).
Anyway, one class he was showing us how to use objects, etc with what he had made prior to class... it didn't work. He made some comment like, "This worked 10 mins ago in my office." and tried to figure out what was wrong. A few french curses later and we got, "THAT IT! Class is over." And he walked out.
After working
Access has its place (Score:2)
Whatever tool you decide on for the back end, (Oracle, SQLServer, Postgres, whatever), I've had great success using Access as a front end. No data stored in it, but just the GUI and some queries/procedures/functions.
open source to rescue (Score:1)
Re:Easy... (Score:2)
Access isn't all bad - ignore the /. bias (Score:5, Informative)
OK, firstly you need to convert the data from Access to SQL Server. This is essential: Access is really an excellent front-end system, but it's data handling sucks big time in a mult-user situation. The upsizing wizards included with it do a pretty good job, although you'll undoutably want to tweak manually. Upsizing then reviewing the database and adding relational integrity and other database rules is an essential first step. If you can't afford SQL Server, which is probably on of MS's best products, the MSDE will do if you don't have too many users. It's also a little known fact that Access will run as a front end to Postgres - although I've never tried this myself if you Google for it there's quite a few resources out there.
Having upsized the database you then have two choices. Review and modify the upsized MDB front-end, or create a new ADP project and convert. ADP's have some advantages, but you have to convert manually and rewrite the data access code. This does take time (although a suprising amount can be cut and pasted from between MDB and ADP). The choice here is heavily influence by how the old database has been written - I've seen some Access applications which are practically VBA applications and need to be rewritten susbtantially to use SQL Server even if left as MDBs, whereas others hardly need any changes at all. If you are picking up the application to support yourself and can afford the time the ADP approach is probably prefable as you'll get to know the code and iron out any junk.
You should indeed consider what use you can make of LAMP (or more accuratly WISP). Access's strengths lie in it's ability to support detailed responsive Forms for data entry and most particularly it's Reports where complex output can be generated remarkably quickly - generally it's RAD abilities blow LAMP and similar away for anything but a simpler application (and Ruby on Rails, that includes you
However in a business context it's quite usual for there to be a core group of users who are responsible for data entry and 'expert' use of the system, and a wider group of users who need just read-only access or some very simple data entry, generally for a limited number of screens. If this is the case it's a viable strategy to replace Access by a browser interface for these users. PHP runs happily on a windows server so all your LAMP skills can be applied quite readily. THE major advantage of replacing Access for the casual users is that you then no longer need to deploy Access, which will save you both licence money and support time.
If at a later date you have the time and motivation to convert more of the core user functionality from Access to browser then you can do that. A viable strategy is to convert the Forms but leave the complex reports in a Access as a 'reporting suite'. In many business setups it's quite common to find an 'expert user' who is capable of creating bespoke reports in Access. Handled correctly these people can be a valuable asset - generally I create an 'Adhoc' or 'Scratch' Access application for them (mdb is strongly preferred in this case so that objects are not created on the server) which they can use to generate bespoke reports. The core functionality is placed in a separate Access application which they do not modify.
Take-home message is to recognise that all these technologies have strengths and weaknesses and play
Re:Access isn't all bad - ignore the /. bias (Score:2)
Re:Access isn't all bad - ignore the /. bias (Score:1, Offtopic)
Re:Access isn't all bad - ignore the /. bias (Score:2, Interesting)
Although I disagree with most of your post (having developed applications in Access at the start of my career 10 years ago and, reluctantly, quite recently) the above is the point I'd like to take to task.
If you are deploying to a large number of people you'll likely deploy the royalty-free Access Runtime which allows you to run an access
Re:Access isn't all bad - ignore the /. bias (Score:3, Interesting)
Re:Access isn't all bad - ignore the /. bias (Score:1, Insightful)
Wisdom from the Data Warehousing department (Score:3, Informative)
Access's primary strength is that it allows a novice but intelligent user to store data in a database and create views with which they can examine, alter, and add to that data. This makes it very attractive for many small business owners to cr
Visual Studio (Score:2, Informative)
Re: (Score:2, Funny)
access - meaningful ERD (Score:1)
Once you have a real database design (implemented in an modern RDBMS) and all the data in MS SQL than you can transform the data to fit the new ERD.
Neal
Get to 3rd then step back thoughtfully. (Score:1)
Third normal form (absolutely no duplicate data) means you can't keep total on invoice. You must query and total line item. Line item in turn must query the pricing history table to return the correct sales price for the invoice date.
Putting a total on invoice and a price on line item both violate the third normal form but are still usually good ideas (there are exceptions where line items are added/removed constantly).
Immediatly fire anybody who speaks of normal forms higher then the third UNLESS they
Re:Get to 3rd then step back thoughtfully. (Score:2)
Making good sense of Access is hard (Score:3, Informative)
If the former programmers were "macro happy" it is very difficult to decode, but with time, a lot of paper to map it out, and even more patients, you can get it done.
Good luck with your project. If you need any help, reply to this message and we can talk.
Randy
Total Access Analyzer (Score:1)
http://www.fmsinc.com/products/analyzer/index.html [fmsinc.com]
has helped me get my head into new db's on several occasions.
Also by FMS, their Detective product
http://www.fmsinc.com/products/detective/index.htm l [fmsinc.com]
is great for figuring out where tables/code have diverged.
Visio Professional (Score:2)