Access has Its Place
Our reader’s comments are varied. However, one thing that appears common in almost every comment, for or against, is that Access is bad as long as it stays where it belongs. It is a great tool for prototyping, one step up from spreadsheet power users. It helps support needs for ETL, reporting, monitoring and other niche areas. It is not an enterprise platform.
I can’t remember hearing anyone say, "we should get rid of spreadsheets. They are inherently evil." So what makes Access different? To me the difference is, people become enamored with the ability to put together working applications that are easy to use, full featured, and it can be done rather quickly. They want that capability with more users; more data; more functionality.
Some try converting Access applications to use SQL Server to deal with corrupted data files without understanding the underlying system. I helped a client convert an access jet database to SQL Server, only to follow on with a very expensive engagement making his sophisticated application work with optimistic locking.
His application would open up dialog form from a summary form allowing modification of detail data. After saving the changes, the dialog form would close, and his summary form would throw an error saying that the underlying data had been modified by another user (himself). Access is capable of those kinds of scenarios; but, typically with a very different approach to data binding and making it work.
I did one SQL Server application years ago where they customer required an Access front end so that they could write their own queries. Twice a day I would get a call from him telling me that his data entry people are complaining because they can’t enter data. He had written a query that joined every meaningful table in the database with no where clause so that he could use on screen filters to mine data. Each time he opened this query it locked the entire database. I’d tell him to close the query and everything started working again just like magic.
These are the kinds of horror stories IT people have over and over when Access applications grow beyond the product intent, and seems to be the primary reason why developers of high volume or many user systems don’t even consider Access as a potential platform.
Here are more thoughts from our community
Paul:
I will throw in a plug, SQL Server 2008 Bible has a great chapter written by Access guru Mary Chipman on using Access as a front end for SQL Server.
Bob:
First, I really wonder how many SQL DBA/Developers (like myself) must look back and admit with humility that the infancy of their database and/or application development experience was honed in Access? I read your article and it’s remarkable how many parallels there were to the beginnings of my own career in IT.
There were other points you made that struck a chord also. It seems almost universal that any developer I meet will gag and guffaw at the mere mention of the word "Access", and I never understood why. There can be no argument that a database application developed with Access, whether back-ended by an enterprise-scale RDBMS or not, shouldn’t be deployed to multiple offices within an organization. The packets generated by Jet when interacting with its data seem to have a lot of overhead, which is bad when the forms and data are on two different servers, and there are other inefficiencies and vulnerabilities that only the most experienced Access developers would even be aware of much less know how to avoid. In a nutshell, regardless of how carefully developed, an Access application will scale badly, and what database application ever made it to production without its user base eventually growing beyond the original requesting group?
I see Access as an incredible "one-stop-shop" development tool; enabling you to create a solution including full-featured UI, database and reporting in a single, cheap, easy-to-learn environment, and in a fraction of what a typical development cycle would be. But on the other side of the coin, all those things have also become Access’ curse. It has become extremely easy to create an extremely horrible database application with Access, and I have seen it many times. I’ve seen "vigilante" Access databases sprouting up like weeds in an organization when a few folks with a smattering of Access savvy decide they’ve outgrown Excel. And almost 100% of the time I was eventually asked to scrub, correct, merge and/or migrate the data in these applications into something that worked. I think there are very few well-qualified Access developers out there, and they are far outnumbered by folks who "give it a shot" because they’ve taken a class or got something to work on the tail end of a wizard a few times.
I attribute the beginnings of my understanding of how relational databases work, how to build an intuitive, ergonomic UI and how to make some really slick reports to MS Access, and I even think that for small companies or small groups within mid-sized companies it has great potential as a development tool. Its undoing however, is the all-too-common scenario where a supervisor or manager wants a "cheap and dirty" solution for 20+ people fast and the semi-proficient Access guy says, "I can do that!".
Thanks for the article,
Finlay:
Is Access dead?
Absolutely not.
Jeff:
You’ve hit spot-on with your comments on FoxPro (VFP).
Twenty years ago I cut my programming teeth on FPD/FPW 2.6; I credit the tool with having contributed significantly to the formation of my career as a developer. Its foundation is certainly responsible for the understanding of good database design principles that I’m proud to count as a part of my playbook.
The IDE isn’t quite as good as Visual Studio’s, but it’s certainly better than Java on Eclipse 😉
One thing I sorely miss, after having switched to VB.NET about 2-3 years prior to Microsoft’s announcement of VFP’s discontinuation, is the small and wonderful community that surrounded the product. It was absolutely second to none. To put it plainly, it was like a large family—one was very much among friends there. (It’s still active, but greatly diminished.)
So thanks for the trip down memory lane 🙂
p.p.s. I might add to the mix that I was a hopeless FoxPro zealot 🙂 Nobody could say a word sideways about my favorite tool without catching a beating 🙂 MSSQL was the Evil Chancellor, come to pillory the best and brightest 🙂
Mark:
I for one have worked with MS Access since Access 95, and have also worked with just about every iteration of MS development technologies since (Access/Office through 2010, VS through 2010, SharePoint through 2010, SQL Server through 2008, etc.). Whilst it is true that most enterprise apps are best suited and managed through web interfaces with a proper RDBMS offering much greater functionality and scalability, this still is not always the case. Amidst the often mentioned rapid solution development capabilities of Access, there is one very useful capability that seems to be constantly overlooked, and one that I personally have had to implement on more than one occasion and for which Access is almost without equal…Offline, portable access to data and functionality.
Before I go into two scenarios that made an Access solution the BEST choice (over winForms, Web), I wish to clarify an often over abused and misrepresented argument against MS Access. Many people speak of Access’ inherent “bound” data handling (and subsequent data-locking) as a common issue for performance and multi-user access issues. This is true, but this is merely the inherent simplistic approach that makes Access easy to use by the masses. However, even .NET tries to offer this kind of simplistic approach in some of its WYSIWIG design interfaces. This by no means is a limitation of Access. By using simple VBA.NET objects one can easily “detach” forms from the data they are displaying/updating in the same way a winForm or web interface is detached. Sure there is an overhead for the developer as all data access and updates must be managed manually through SQL statements in the code, but this is not much different than developing under .NET through VS. What’s more performance is increased because ADO command objects can precompile SQL requests, much like a stored procedure in SQL Server, and the data is no longer being perpetually locked by bound forms. I have even developed “logical” data locking algorithms on business data entities within an Access DB so that I can manually manage things like concurrent data updates etc. so that data integrity is maintained from the VBA code.
One other important bi-product of this approach, is that the often encountered performance issues of trying to run an Access front-end against an Access split-file data store elsewhere on the network is all but removed; the data access is managed through VBA data connections and no longer via Access’ built in and cumbersome linked table mechanism. In fact there should no longer be a need to even have a table or linked table on the front-end (other than for configuration information) as the data connection is managed manually; Access merely becomes a convenient, and powerful, interface coding tool.
Two classic examples that I had to implement concerned both a small not for profit organisation and a large multi-national private Swiss Bank:
1. Not for profit
The not for profit could afford neither the IT infrastructure nor the support personnel to run enterprise level systems. Before the Access solution, they were used to being able to work through multiple Excel sheets and Word documents that they could easily take home and update out of the office without any fancy Citrix or even VPN connection back to the corporate network. There were about 8 permanent users in the office and several others that would occasionally need to access the system. Using the “unbound” data approach above, the performance amongst even hundreds of concurrent users would have been virtually instantaneous, because only small subsets of data needed to be accessed through rapid connect/disconnect operations within the forms’ VBA code, with all data locking handled manually through the data access logic layer all within the VBA. This was great, but where Access really shone was when a user wished to work from home. Without needing any special setup on the users laptop (i.e. SQL Server, supporting runtimes etc.), I created a manual data synchronisation algorithm permitting the user to take a full copy of the data portion of the Access database to work unplugged from the corporate network. Upon return the user simply resynchronised the data with the master data file permitting them to add all their changes and receive any changes made since they last synchronised. Any conflicts of the same data object being modified both in the master and in the synchronised copy were signalled to the end-user so that they could choose how to update the data object.
By not using the native mechanisms offered by Access for data-access and data-synchronisation, yet still relying solely on VBA native mechanisms to replace Access’ own means, all performance, multi-user and data integrity issues were solved, and a simple to distribute solution (two files) could both be used onsite and offline.
2. Multi-national private Swiss Bank
A custom made web-based CRM solution was implemented through .NET web technologies for use by all portfolio managers in multiple branch locations within the banks internal network. This was met with such positive feedback that it quickly went through multiple iterations making it available to en even wider user base within the internal departments of the bank. One of the three founding partners of the bank, saw the potential for managing some of his personal “contacts” that, for security reasons, were not managed though the banks internal databases. Again a criteria being that he could take the data offline on his laptop. Using a similar implementation as described in point one, Access came to the rescue with a simple online/offline solution.
Sure Access isn’t the right tool for solving all problems, but it certainly has its place. If used correctly, it offers a powerful development tool offering virtually all primary interface and data functionality from within a single file, requiring no additional supporting infrastructure. Even with the ease at which enterprise level architectures can be implemented today, the two above scenarios are classic examples of the continued need to have such a tool at the developer’s disposal.
Thanks for all your contributions to the IT community…keep them coming,
Mike:
I have found Access to be a great tool for the “Non Developers” in a crowd. I am a SQL Server DBA and I wrote a program to monitor all the SQL Servers entrusted to me using SQL Server to gather, store and secure my data, and Access to modify, display and report. It works really well because I have the best of both worlds. I’ve got a framework to build forms, reports and queries, but I’ve also got the ability to access data in a multi user environment and secure it at a very granular level if I want. I have begun to “evangelize” the people in our business units who use Excel as a database by importing their data into my data warehouse and giving them access through an Access frontend. Hopefully soon we will have far less key business processes running on Excel spreadsheets from shared folders.
Long live Access (when used properly),,,,,
Michelle:
Regarding your comment:
"Moreover, I am told without coboration that the RushMore technology from FoxPro was added to both the Jet and the SQL Server engine. There was a marked performance boost when the next SQL Server release came after the FoxPro purchase. Who knows if there is any relationship there…that’s just gossip."
It’s not just gossip. Back in the day, about the same time that you were developing in Fox, so was I. Since I’ve always approached dev from an architectural point of view, I found FoxPro (as it was known then) to be less than satisfying — it didn’t support many-to-many relationships. As a matter of fact, I found a paragraph in the Fox dev manual regarding many-to-many relationships, which read (paraphrasing from memory now): "…since many-to-many relationships rarely occur in real life, we will not discuss them at this time."
So I switched to Access 1.0, which DID support many-to-many relationships. Following the Microsoft buyout of Fox, I noticed that the Access Jet engine got REAL fast, so I asked my friendly MS inside person if they had integrated Rushmore. Yes, it’s true…Fox was purchased in part for its Rushmore Technology, which was quickly integrated into Access, and later on into SQL Server. And there you have it, the other side of the story.
P.S. During all those years that I developed in MS-Access, I loved it! It was fragile, didn’t offer transaction protection like SQL Server with its transaction logs (the Access pessimistic locking was a huge overhead!), wouldn’t run as a service, causing monumental data transfers across the LAN (Access may have been instrumental in more companies upgrading their network capacity than we’ll ever know) — the list goes on and on. But, I could do SO MUCH SO FAST! Access was fabulous for prototyping — in a day or two I could put a prototype UI in front of my clients, and if this were a (small) departmental application they could go into production with it. Up-sizing to SQL Server was a little tricky, and — in order to support enterprise-level transaction activity — inevitably required a re-write of the UI into something like VB — web was still pretty primitive in the early and mid 90s.
Access was such fun, such a great platform to work in for a database developer, and incredibly useful as long as it was a replacement for linked spreadsheets, limited to no more than 3-5 concurrent users, with a database no larger than 2 GB. I wonder how folks view it today? Will have to read all the comments.
Thanks for the walk down memory lane!
Well, it seems that some of us have a longer memory than others. So, why not share yours with us. Send your comments to btaylor@sswug.org.
Cheers,
Ben
$$SWYNK$$
Featured Article(s)
Product Review: Evaluating the ModelRight Database Design Tool
I have had the opportunity to use ModelRight for real world database development tasks. I have been working with a client who has done their database documentation using ModelRight, and needed to share the same tool. I decided that I would write up a review of my first time experience using ModelRight for this project.
Featured White Paper(s)
Query Tuning Strategies for Microsoft SQL Server
Written by Quest Software
When you’re looking for a reliable tool to diagnose … (read more)
Featured Script
ParseDate Function
Generic SQL function that can parse a date from a string. The function supports many date formats and others can be easily ad… (read more)