views:

620

answers:

15

I am having a real problem at work with a highly ingrained developer obsessed with ms access. Users moan about random crashes, locking errors, freeze's, the application slowing down (especially in 2007) but seem to be very resistant to moving it. Most of the time they blame the computer and can't be convinced it's the fact its a mdb sat on a network drive and nothing to do with the hardware sat in front of them which is brand new.

There is a front end vb program hanging off it but I don't think it would take more than a couple of weeks to adjust, infact I would probably re-write it as it has year on year messy code from a previous developer.

What are my best arguments to convince them we need to move it?

Does anyone else have similar problems with developers stuck in their ways?

A: 

Try bechmarking and showing the stats to him

Daniel Silveira
Benchmarking Jet vs. SQL Server is likely to be a loss for SQL Server, simply because there's a helluva lot of overhead involved in providing SQL Server with the functionality that it has that Jet does not include. It's quite common for an upsized Access/Jet app to run more slowly when upsized.
David-W-Fenton
A: 

Here is an in depth list of reasons why you might consider moving straight from Microsoft:

http://msdn.microsoft.com/en-us/library/aa902657(SQL.80).aspx

jezell
+1  A: 

I once had similar problems with someone I would not hesistate to call a complete idiot.

It was not possible to convince them of the issues with access. In the end it was easier to force the issue than do it "nicely", cruel to be kind.

Nat
A: 

Making people change can sometimes be a real pain in the butt.

I would have to say the main argument would have stability and speed, but of course like you have said they already know this a still won't move.
Another thing to try would be to show them the power of LINQ to SQL and how much cleaner it would make your application. Like Daniel Silveira said you could try and throw a couple of stats there way and see if they are convinced.

We have a app build using MS access as a back end and I can't wait till we get our new SQL server so I can move everything to that.

Nathan W
A: 

You could show him the perf results comparing the two, but if he's really set in his ways and refuses to change, there isn't much you can do except force him somehow.

If you're his boss then just force him to change it to use SQL. If not, then convince your boss to force the change by showing him the perf results and explain it'll fix the issues you're having.

Chris Pietschmann
+1  A: 

If they resist then you can always go above their head. Management must be aware of crashes and stability related issues. Present a plan to them to improve stability and they are likely to at least listen. They will probably then want a meeting with all developers to discuss so go into it armed with plenty of ammo.

Craig
+9  A: 

how about the random, crashes, locking errors, freeze's, slow downs (sic).

A quick search on the web finds some useful materials:

It's hard to convince people that are not willing to learn and are not open to new ideas. You can go on about speed issues, concurrency issues, security problems.. but ultimately, some people will just never listen. Go over their heads. Rewrite it in tools from this decade and show them up. Refuse to be involved with the project and further. I don't know what the political situation is, but technically, MS access is wrong for what you are doing, from what you've described.

gregmac
There is not really one answer to this so I gave the answered to the highest rated.
PeteT
+1  A: 

come in on a weekend, copy the database to sql server, change the app's connect-strings to sql server, retest the application, then uninstall ms-access...everywhere.

then don't say anything about it, let him think that the problems 'fixed themselves' and that the users are still using ms-access

Steven A. Lowe
+3  A: 

To me it depends on how many concurrent users you have and how big the database is. If you have more than 5 concurrent users then you should be thinking about a database server. The network traffic starts to get out of hand and with each concurrent user you add it just gets worse.

I have created reliable access based systems for years. If you are having random crashes, locking issues, and slow downs then you aren't doing something right. I typically will have an mda local with the mdb on the network when creating an app in access. To have good performance it's key to have the proper indexes and queries optimized for getting just the data you need. Whether using a separate app, access, or some app running against sql server you need to actively handle record locking properly. You can't just blindly let access lock your records.

bruceatk
I think that even 5 is quite a small number. I, too, have a number of Access databases still in use and seemingly reliable. Access can be very useful for small companies. People to work with SQL can be expensive.
Remou
I'm saying 5 concurrent users. I have had access apps used by over 25 people, but their activity wasn't concurrent.
bruceatk
I have always heard about 5 users too and at peak times we have about 10 however we have some working actually in the db and some working on a front end. I think this one of the issues.
PeteT
The number of concurrent users allowed by Access is 255, however, for the most part, another database should be considered if you need that number of users. Access is better than most people think it is, but it is often very badly set up.
Remou
The 255 is a hard limit not a realistic one. If you really had 255 concurrent users you would all be seriously bottlenecked on the network. 255 database engines all accessing the data on a shared network drive is not a recipe for success. Compare the numbers and 5 is more realistic.
bruceatk
I have to disagree on the second assertion "how big the database is" this is not a great reason to consider a client server DB over access unless we are talking truly massive systems (in which case SQL might not be great either).
JohnFx
On the # of users debate, I have managed systems with over 60 active concurrent users that performed well. It just requires a very well designed system. Access gets a bad rap (like VB) because it makes it "too easy" to build a basic working app for someone with poor design skills.
JohnFx
A: 

Errr, leave the team? You seem to be working with the totally wrong set of people. Now, if the team IS your company, then you are working with the wrong company.

Of course once you leave the company, you could tell your clients that you could solve the network problems on their own and make them leave the company as well. Then give them an improved system that works on SQL Server Express.

Jon Limjap
+2  A: 

The best possible advice I can give you is to make sure that you have a good attitude and are known as someone who does quality work and gets things done. It sounds like you don't have any control in the situation so what you need is influence.

Find a way to solve a problem (probably a different one that is less threatening to the people involved) in the way you are suggesting. Make it work blindingly fast and flawlessly. Make it work so well that people start asking for you when they need something done. Get it done quickly, which you should be able to do because you'll be using the right tools for the job.

Be a good person to work with, not the PITA that knows how everyone else should write their code. Be able to give an answer for what you might do differently and why, but don't automatically assume that your ideas are always the best. Maybe there are trade-offs that you don't know about -- no money in the budget for the extra CALs, we have this other app that needs to be done first. This doesn't sound like your situation, but looking for opportunities to understand before making constructive criticisms can go a long way to helping people be receptive.

The other thing is that this probably has nothing to do with the technical aspects of the situation and everything to do with the insecurities of the other developer. "This is all I know. If we change it, I won't understand it and then where will I be." Look for ways to help the other guy grow -- when he's having a problem, find resources that will help him develop good technical solutions. Suggest that everyone in your department get some training in new technologies. Who knows, one good SQL Server course and the guy could become the SQL Server evangelist in the organization because now THAT'S what he knows.

Lastly, know when to cut your losses, so to speak. If you find that you're not able to do anything about the situation, don't add to the complaining. Move on to something that you can control and do it as well as you can. Maybe in the future you'll be in a position that you do have control or influence in the situation and can do something about it. If you find that you're in a company that's more dysfunctional than most, find a way to move on to a place where the environment is better.

tvanfosson
+1  A: 

More than "How to convince them", let's talk about "How to do it without anybody noticing"!

First of all I advice you not to mix together the code optimisation issue and the SQL server one. Do not give users a chance to complain about SQL while bugs are related to something else.

If your code is really unbearable, rewrite the app before switching to SQL, keeping in mind the following points to make the final transition to SQL Server completely transparent for final users.

This is what we did 18 months ago, and I am sure we still have users thinking our database is Access:

  1. Export current access database to SQL through available Wizard in access for testing purposes (many problems might occur, and you could need another tool such as the one proposed here).
  2. Create a unique connection object at the application level, so that you can freely switch from Access to SQL at any time (at development level, you can even add an input box at startup to ask which connection to use). We chose an ADODB connection object, but it will also work with ODBC connection.
  3. In case you use SQL syntax to update tables, make sure that all SELECTs, INSERTs, UPDATEs and DELETEs make use of this connection. In case you use recordset, make sure that all of them use this connection at opening time.
  4. When needed, update all connexion specific code by adding a "SELECT CASE" type_Of_TheConnexion options
  5. Switch to SQL connection ..and debug till you're done!

The problems you will find are mainly linked to SQL syntax, where MSSQL uses ' instead of " and # as separators. Date format is also an issue, where standard SQL format is 'YYYYMMDD' while MS-Access format depends on computer locals (beware of conversions from date to string!) and is stored as "YYYY-MM-DD" (if I remember ...). Boolean in SQL are 0 and 1, while they are True/False or 0/-1 in Access ...

Test, update code, and when you are ok, make a new data transfer, lock your app on the SQL connection, and distribute a new runtime.

Philippe Grondier
+3  A: 

Forget the arguments about DB Size, it is an uninformed reason to shift to a client-server platform in 90% of the cases I hear it brought up.

Your best arguments are based on features explained at a low tech level: (1) You can backup and perform maintenance on the DB without kicking out the users (which introduces costly downtime).

(2) Faster recovery if data is accidentally deleted/mangled or corrupted. Again, less risk and less downtime. This is always a good foundation for a business case.

(3) If (and only if) you anticipate the need to scale quite a bit, the upgrade will better allow that.

(4) If you need to run automated jobs/updates, SQL can do this much more elegantly.

Remember the contra-indications for SQL, it is easy to get on your technical high-horse about this platform versus that, but you have to balance the benefits against the costs. SQL is a Helluva lot more expensive to maintain as it requires dedicated hardware, expensive licenses (Server OS and DB) and usually at least a part time DBA that is going to cost you a bare minimum of $75K (if you get luck AND work out of Podunk Iowa).

JohnFx
+1  A: 

It depends on the type of application and data load of your database but Access is quite efficient, even over the network.
Depending on the amount of data your users deal with you could easily scale up to a 100 users on a network just using a from and back-end Access database.

Looks like in your case a rewrite may be in order. If your application is data-centric if doesn't make much sense to develop it in VB6: the tools given by Access are much better than anything you'd be able to make, especially when considering Access 2007.

Upsizing to SQL Server is only really required if you're getting into issues of:

  • Security:
    you need to make sure that only the rights users can access data. You can do your own security in Access, but it's never going to be as strong as SQL Server.
  • Scalability:
    you're dealing with lots of data and complex queries or a lot of users and it would be better to have dedicated hardware to handle the load for the clients. The issue with this though is that while removing the pressure from the less-capable clients machines, you're adding a lot more to the server.
  • Integrity:
    With the back-end database being just a file that needs R/W access for all connected clients, there's always the possibility that someone is going to do something bad or that a client may crash and leave the database corrupted.

If your number of users is average (I'd say 30), then there's probably no real need to upscale:

  • Use MS Access 2007 to develop your application, then just use the MS Access 2007 Runtime (it's free!) on all client machines to get a more modern user interface (uses the Ribbon and has lots of UI enhancements over previous versions).
    You can't be the cheapness of that solution : you only need full retail version of MS Access and all the rest is free, regardess of the number of users!
  • Don't think that moving to SQL Server is going to improve performance of your queries: MS Access often does a better job of optimizing the queries for you (it knows what needs to be displayed and does lots of caching and optimization).
  • Make sure you only edit small amounts of data at any one time (don't use dynaset queries just to display vast amounts of data in a datasheet; use a snapshot instead and open a detail form that only contains the data to edit when necessary.
  • Cache complex queries locally.
    Built some caching mechanism that leaves a copy of the results of a complex query on the local machine. The gain in performance is pretty amazing and if the query doens't change much (for instance a log of stock operations) you can just persist the complex/big query locally and append new records as necessary.

There is so much more to say.

Bottom line is: you may be looking at a rewrite, but don't dismiss Access as the solution because your current application was poorly written.

Renaud Bompuis
+2  A: 

It is possible, and actually fairly easy, to convert an Access database to having the tables/views in SQL Server while still using the Access app as a front-end.

From there, your Access-obsessed developer can still have fun with all that VBA code. Meanwhile, on the back-end, you add indexes and such to speed everything up. Maybe someday you get lucky, and he asks about stored procedures. Then, the app is just a front-end, and who cares what it's written in? Your data is safe in SQL Server.

It is possible for you to do this yourself, but just leave the production app ALOOOOOOOOOOOONE. Take a copy, and convert that copy. Then, host it for a couple of users to TEST drive .. make your version of the Access app show "TEST APP" in big red letters. If your developer asks what you're doing, you can say the truth -- you are testing to see if converting only the tables/views might be of some help to the overall app.

This way, you get the best of both worlds, keep your developer happy, make the users happier (hopefully), and if you play it right, your bosses will know that you handled a knotty personnel issue with your technological prowess and your maturity.