Upgrade Access 97 mdb to Access 2010 mdb/mde? Experiences? - ms-access

I have a really old, Access 97 app which needs to be modernized. I'd like to make something more modern, but it would likely be a bit to expensive to rewrite the whole applikation to a real winapp (or webapp). So the idea now is to upgrade to Access 2010. However we tried the automatic upgrade tool, and that broke. The app is rather big with 40+ forms and modules.
I just want to know if someone have a real world experience from a similar situation and/or has any advice as if it's a likely dead end to try to upgrade. Or better - should be possible.
Also - I might need some help, if someone can advice of a company that are good at these kinds of tasks.

There have been a lot of changes between Access 97 and 2010. Each upgrade (97 to 2003, 2003 to 2007, etc.) had quirks that you needed to be aware of. The conversions weren't usually simple tasks, especially when you had a complicated database with lots of things going on. Taking the leap from 97 directly to 2010 will be almost impossible in your situation. However, it can be done if you take it slow and address the problems at each stage. The issue is that it might take more time than you are willing to give to it.
In my search for answers for you, I came across companies that did this type of conversion for you. This, to me, is one more indication that this isn't something you just let a wizard do (otherwise, who would pay for the service). Here is one of the companies I found:
http://www.consultdmw.com/convert-access-97-database.htm
I've never used them so I'm not endorsing them. I'm just using them as an example.
There are also resources out there of people that have walked down this path and shared their experience. These might be valuable to you in determining if you want to go down this path and if so, what to look out for. Here is an example:
http://chentiangemalc.wordpress.com/2011/03/24/upgrading-access-97-application-to-access-2010/

I don't have Access 2010 and don't know about that automatic upgrade tool you mentioned. With Access 2007, I can import objects into a new empty MDB from an earlier version database in stages.
First import tables, and verify data imported correctly.
Next import standard and class modules. Run Debug->Compile, and fix any errors the compiler complains about. Might have to add references as needed.
Then import the forms and run Debug->Compile again.
Same for reports, if any.
Best case, you would have few fixes needed to get it running with 2010. If the amount of fixup work is unreasonable, then consider farming it out to a service.
But I suggest you at least try the manual import method first. You shouldn't have to invest too much time to see whether it's worthwhile to continue.

Related

Is installshield suited in this scenario?

The scenario my company asked me to find solution is,
Install MySql
Create Users and grand privileges
Create a database
Install Multiple exe files
Run 3-4 sql scripts.
Ok so i saw InstallShield features, i was looking at NSIS option too but my company dont care if we will buy InstallShield or use a free one so i dropped this options, after 2-3 hours of researching i found that installshield is probably the best.
But i have 0 experience in this field and i cant tell for sure if InstallShield can meet my needs or if im overthinking this scenario and there is a simple solution.
Any advise is appriciated.
I recommend everyone to not go with InstallShield. Better go with WiX (Windows Installer XML).
In our company we used InstallShield MSI-Project for a half decade and it's really a pain. When you try the demo-version everything looks nice and polished but as soon you get more and more requirements you will start to notice that there are many bugs and using InstallScript for custom actions will bring you back in the 90s.
The syntax of WiX (which is pure XML) will look confusing and hard to read in the first time but it's so good to have makros and variables that you can use in your markup on your side.
You can write your Custom Actions in C# and therefore you are able to use some existing code for creating users and grant privileges.

Best way to update products

Some background:
We provide a complex system consisting of a large database and several programs - most written in C#, however some legacy applications are still running on MFC.
Most of the stuff we provide runs on a single server (runs SQL server and SQL Management studio 2005), however several applications can run on a number of client's computers. Updating this is a real pain, since after we update the database the outdated software is likely to break due to database changes. Updating the server software manually is one thing, however making sure all the client software works too is practically impossible, and will only get worse with time.
I am to write an updating service, which will be able to update the whole product - update the database, reinstall services and applications. (However only the programs / files /tables / etc that are actually modified should be updated. Downloading the whole product each time there is a update available is not an option. Also, some computers may only have a subset of avaliable programs installed)
First of all is there a already a good way of doing this? If there is something similar to ClickOnce that would also be able to update databases already out there I'd much rather use that.
If not, what are the best practices when it comes to updating? All and any material will be greatly appreciated.
I will need some updates to be installed on the server ASAP after the updates have been submitted, without any user input. That includes a windows service (that is running at all times) and any database changes. After these changes have been made, I will have to prevent any software that is not up to date from either accessing the parts that have been changed, or from running at all.
Any advice will be greatly appreciated - If I do have to write a system like that, I'd like to do it right.
Best practice would be to package the app up in an MSI and use Group Policy to push the updates out to each client.
If that's not possible then you need some way of informing the client app that it is out-of-date (simple check against a server holding the current version number would probably suffice) and refuse to work until an update patch is downloaded and installed - you could even launch this process from inside the app itself.
This answer may help you, I haven't personally used Wix but this seems to be along the lines of what you're looking for. Make sure to check out Lesson 4 in the linked tutorial, as this provides the details you would require.
I'm not sure where you would find best practices when it comes to updating, but in my personal opinion you shouldn't ever force a user to update unless it breaks the underlying application (like yours does). I would be very interested to hear if someone has a link to a list of best practices on this topic.
Edit
I was interested in possible best practices for updating so I started another question thread here. The general consensus in the answers is "Ask the user/client", but there may be some other details in the answers which may help you, I'm afraid I can't find any actual hard rules on the subject anywhere (which I was expecting).

How to integrate Visual FoxPro w/ MySQL for eCommerce website?

I'm working on an eCommerce website for a small merchant. This merchant uses Opera (which is based on Visual FoxPro) to manage his in-store inventory, and would like the online store inventory to reflect the in-store inventory.
I'm guessing that my first step is to set up a way to regularly transfer the information from the VFP database to a MySQL database on the website's server. Is there an established process for this? Am I even approaching this problem from the right angle? I've heard a lot about ODBC, but am unsure as to how to implement it or if it's what I'm looking for in this situation.
If it wasn't obvious by this point, I'm in over my head here, and would appreciate any and all advice you may have, including links to articles or tutorials that can help improve my general understanding of all the moving parts here.
Thanks much.
Co-worker developed synchronization process between VFP and MSSQL2008. WCF service which took input directly from VFP.
On other project - as far as i remember, when we tried ODBC .NET data adapter, it had problems with encodings and foreign languages. That's why we used COM+, serialization for communication with .NET.
But it seems to me you are using PHP (eCommerce=>Drupal=>PHP) so you are in completely different situation.
In your case, i would start with checking out if Opera (i guess it's this Opera) provides built-in export and eCommerce provides built-in import. Mostly because it might be tedious work to sync data manually from 2 apps coded by someone else. Then i would research if i/o can be joined and automated (something like scheduled task on win environment). Unfortunately, can't help much more because i'm unfamiliar with those tools, products and technologies.
Anyway - it seems to me like quite hard and dirty task and i wish you good luck. :)
Depend on what is that you are using to implement the website.. in general it is pretty easy with ODBC (In Java , I did it using the jdbc-odbc bridge)

MS Access: How can I find out where Tables, Queries, Macros etc. are used?

We've inherited an MS Access db/application (Office 2002) with great names such as NewTable, Subform or Macro1. Unfortunately, when we change these to more meaningful names, the references (in other Queries, Forms or Actions) are not updated.
How can we find out where a specific object is used?
MsAccess has an OBJECT DEPENDENCIES checker. in Access 2007, for example, you must:
click on object (a table, for example);
click on the DATABASE TOOLS tab;
click on the OBJECT DEPENDENCIES (if asked to update dependencies info, click YES)
this whitepage details the process and recommends additional steps that you might wish to take.
In access 2003 and 2000, the process is slightly different, for the interface changed significantly from 2007 onwards
You can check the system tables, MSysObjects and MSysQueries for references to tables and queries (you can also check the sql string of querydefs). You can loop through the properties of forms and reports, and their controls, for references to tables, queries and macros. You can search code.
The Name Change auto-correct option is usually deprecated, but it may have a place here.
I had found ACCESS Dependency Checker as free Microsoft Access Add-In that that reveals the dependencies between database objects like tables, queries, macros etc. I had installed and it's satisfactory for my needs. Try it.
If you have Access 2003 installed somewhere: there is an option to list all dependencies. Just right-click an object and choose Object Dependencies (I'm not sure about the translation, I have a Dutch version here).
This will show you dependencies in both directions.
After opening the database in Access 2003 you can still use it in Access 2002. If you are unsure, you can always create a backup copy.
A shareware tool that can help you with much of this is Rick Fisher's Find and Replace. It has a 30-day trial and costs $30 to register.
Another more full-featured tool is Black Moshannon's Speed Ferret. It's a really excellent product, though relatively expensive ($170). It's also rather problematic in that they never released a native version for Access 2003 or 2007. But you're in luck in that regard as you're dealing with 2002.
If you really want to do this quickly, Speed Ferret is definitely worth the money. Consider your hourly rate and any significant project will pay for itself the first time you use it.
Rick Fisher's tool is less professional and less full-featured, but may be sufficient for your needs. I've only tested it, never used it in a full-fledged project.
There is this small add-in, free and usefull vtools, that, among other possibilities, specifically allows you to search for values in all access objects (tables, queries, code, forms, ...).

Porting MS Access application

I have been asked by a friend to help him assess a number of quotes for porting a desktop application based on MS access and VBA to a web based app. The application seems to have a relatively large amount of business logic coded into the VBA.
My question is very specific - are there any good tools or resources out there which could assist the porting from access, rather than doing a complete re-write?
The end technology used for the web app does not matter hugely, but would ideally be as mainstream as possible.
You may explore the possibilities offered by Sharepoint. It may help you get the data accessible online but how well will that work depends also on how much VBA code was used in the Access application.
There are some tools around that pretend they can convert MS Access to PHP/ASP websites like DB Forms, but I haven't tried them and they usually only convert the visible part of the app and not the queries and VBA.
They can be helpful to get started though.
Random thoughts
The VBA tends to be the biggest issue.
Moving to ASP.Net will take time and for that you are faced with difficult choices:
transfer all code to the ASP.NET to just get it working
rethink the structure and do a proper ASP.Net implementation from scratch.
I'd prefer the first one: just try has hard as possible to get results fast.
Use SSMA to move the data to SQL Server (unless you want to keep Access as the backend).
Make the forms look the same as on your existing application (or at least have the same function), port the VBA to VB.Net (or C# if you feel like it) form by form, module by module and test that they work as you go along.
Don't try to refactor or make things better at this stage, the point is to 'slap' the old code on the new 'system' and make it bark as it used to, not better, not worse.
Only then can you start refactoring and improving using the new tools at your disposal.
I'm saying all this assuming that there was nothing terribly wrong with the old app and that it just needed to be ported for online consumption.
If the old app was defective and wasn't fulfilling its role, then more emphasis should be placed on re-thinking which parts should be translated and which one should be reworked.
At any rate, you need to have a detailed action plan and a review of the current code and functionalities and try to limit as much as possible your expectations for the first version of the new system: avoid letting everyone input their wishes or your project will become horrendously difficult.
Concentrate on the minimum needed to achieve a certain level of functionality that will satisfy your users, then build on that.
There may be some tools to some of the basic stuff, like to upsize to a different database or maybe the look and text boxes of the forms, but converting what sounds like a lot of VBA code, not so sure.
Is this an intranet/local network type of web app or are you putting it out on the internet? Security will become a major difference between this and your Access app.
Make sure they understand Access/VBA so you can maintain the business logic that has been over the life of the Access app.
Convince your friend to stop/slow any development on the Access app to prevent the company from aiming at a moving target. This may not be realistic, but really needs to be considered.
Is there a reason why hosting the app on Windows Terminal Server would not suffice? This means zero changes to the app, no reprogramming cost and no danger of losing crucial business logic. If you use the Citrix extensions, you can run it in a web browser (though I guess that only works with IE -- I've never used them). But the RDP client comes in versions for Mac and Linux as well as Windows, so you can basically support anybody as long as they install the RDP client for their OS.
Yes, it's more installation on the client end, but it's a helluva lot cheaper and easier on the development and avoids the problem of losing important things coded into the Access app.
Of course, supporting large user populations on WTS/Citrix can get expensive and if the Access app is in need of re-engineering, anyway, it can change the balance. But it's something that you should consider. It's really easy to set up WTS, in fact, and provisioning a server for it basically a matter of adding RAM and Internet bandwidth (though RDP is really efficient to begin with).
One key mistake many people make when trying to run an Access app on WTS:
YOU MUST SPLIT THE DATABASE (front with forms/reports/etc., back end with data tables only), and each user must have their own copy of the front end (stored in user profile on the WTS, or in a folder on your WTS server's data partition with appropriate permissions assigned to the user groups authorized to use the app). Tony Toews's front-end updater is very useful in this context, and explicitly engineered to work in a Terminal Server environment.