views:

43

answers:

4

I've got a client who has a very large internal system using Access, which is used internally to handle virtually all company data. They want a web front-end to the customer data in that database, and would be running on a different server. Given the limitations on Access, the front-end would likely use MySQL.

Which leaves the issue of synchronizing the data. It doesn't need to be to-the-second, even daily would be fine, but I'm really unsure of a good means of doing this.

Given the scope of the existing system, it would be a disproportionate amount of time and work to move the entire system to another database such as MySQL.

Is there any practical way to accomplish this?

A: 

No need for Access and MySQL. It should only be MySQL.

I'd use an ETL tool to migrate data from one to the other.

duffymo
So you're suggesting that the client throw out all the development work they've done in Access as well?
Tony Toews
Yes. It's hardly an enterprise tool. It was intended as a desktop, poor man's database for an individual, not something you'd want to run a sizable business with. I wouldn't be surprised to learn that it's not backed up or archived well, either. If the enterprise database was SQL Server, the obvious answer would be to upsize it. Why not the same logic with MySQL?
duffymo
I'd gladly scrap the whole thing given the option, but that's not going to happen. At least not now.
Zurahn
Exactly where did anyone say that this was an enterprise-level application?
David-W-Fenton
@David W Felton - "....which is used internally to handle virtually all company data...." - I inferred enterprise level from that. "All company data" seems to qualify.
duffymo
I have clients where their database handles "virtually all company data." They have 3 employees, so not in need of what is usually meant by the term "enterprise."
David-W-Fenton
I hope for your sake that they can pay their bills. I'd still rather not run my business on home grown Access databases.
duffymo
Who said these apps were "home-grown?" You seem to have a lot of unwarranted anti-Access baggage that you're bringing to the discussion.
David-W-Fenton
Where else would they be grown except at home? All I'm saying is that it's irresponsible to risk a company with sizable revenues by trusting all company data to a desktop, single user database. If Access was truly that capable, there was no reason for Microsoft to bring SQL Server into being. It's not a bias, it's a simple statement of fact.
duffymo
Access/Jet/ACE is NOT a single-user database. It isn't now and it never was. SQL Server and Access serve different markets, just like Cooper Minis and Mack trucks. You're not stating facts at all -- you're just regurgitating prejudices that don't even bear much connection to reality.
David-W-Fenton
+2  A: 

From Access it is possible to fairly easy copy content, for example using a button that runs a SQL query that copies the data to an MS-SQL database on internet.

I wouldn't go for MySQL if you don't have to as this introduces character encoding issues, copying to MS-SQL is more sensible.

Be very wary of course, you are going to have 3 systems: 1 access system, 1 web system and 1 system for copying data. This scenario is and introduces higher maintenance costs.

Michiel
+1 for being very wary.
molf
+1  A: 

I would get an experienced Access developer to upsize the Access application to use SQL Server Express for the data instead of MySQL. I would choose SQL Server Express over MySQL is it is very likely to work better with Access and you'll likely find a lost more online support for the combination of MS Access and SQL Server than you would for MS Access and MySQL.

This work can take several weeks or more for an experienced person. And of course the larger the system the longer this will take.

One factor is if the client wants data to come down from the website to the database or just publish data to the web? If just publishing to the web then the suggestion of updating the web database using queries could work. If both ways then things start to get trickier and upsizing to SQL Server for the future would be a better option.

Tony Toews
Sorry, I should have made mention of it, but it slipped my mind. The data only needs to have read access. So the only change in data comes from the internal access side of things.
Zurahn
That's for now. <smile> So coding some queries to copy up the data would work. However the long term answer would be to upsize the data to SQL Server Express. Sooner or later they'll be wanting folks to be able to enter/update data via the web.
Tony Toews
+1  A: 

If the web database is accessible on the local LAN where the Access users are, it would make more sense to upsize the back end to a server database and have a single database. But that's likely not the case, as the web server is probably not local (and this is usually a good thing).

If I'm understanding your comments, this is a clear master/slave relationship, with the Access database being the master, and the website database being a slave. In that case, you should be able to simply replace the website database on a regular basis. There are a couple of ways to do this:

  1. if you can get access to the MySQL port across the Internet, you can use ODBC to simply export the tables to MySQL, via ODBC. I'm not sure if you'd have to drop each table in MySQL before exporting, but you'd find out as soon as you tried to run the export.

  2. if you can't get a direct connection to the remote database, then one option is to run a local MySQL instance, export to it, then dump the database to a SQL script, upload that to the website and run it to replace the existing database. I've done this and it's not as difficult as it sounds. If it doesn't need to be automated, it might be easiest to install phpMyAdmin on both ends and use that. If it needs to be automated, that's a different issue, and I don't know the MySQL commands, but I'm sure it's not that hard to locate the commands.

David-W-Fenton