Hi Pat,In my sold to the public apps, when a new version of the app is delivered to the client, the procedure is for the admin to unzip the FE and open it locally. The app checks a critical table and if it isn't found, opens the link form. The admin then links to the server. The same procedure works whether the BE is ACE or SQL Server. Once the BE is linked, the admin renames the previous FE and adds the new FE to the distribution folder and sends an email that the new version is now available.
Both the FE and BE have version tables and each time the FE opens it compares the FE version with the BE version and only opens if they are compatible.
The final part is what I call a "token". It is 16 characters and has encoded in it the app's expiration date as well as what additional features the client has purchased.
The opening process continues after the table links are confirmed and the versions are confirmed. Then the expiration date and features are extracted from the token and saved for easy reference on the login form which hides itself after everything is confirmed and it opens the main menu. If the product has expired, the app won't open. If a feature wasn't purchased, it usually doesn't even show up on the menus but if it does, it won't operate if the token doesn't say it is available.
Our maintenance period is usually one year. Six weeks out, there is a countdown on the menu to remind the client to resubscribe.
These apps are not ones where there would be any incentive to steal the app and redistribute it. The market is very small and the potential purchasers would all be competitors. It isn't a very good business plan to give your tools to your competitors, or even to sell it to them so we rely on our contract to enforce valid usage beyond what I described. We know our clients and who is authorized to contact us for support.
Inspired by some code you sent a couple of days ago, for which I thank you again, I thought of the following procedure and once it is settled I will post the code. Also, I use IslaDog's side db idea, with the only difference being that I can have a local table instead of another db.
1) Delete all linked files (except the temporary and system files)
2) All clients have a Serial number, so every FE has a table which has information for all the clients and includes the Serial ID, the Server name including the pathname and a boolean field which indicates the SerialID-Server combination to be used. The first time the FE opens in a form where we need to choose the SerialID-Server combination.
3) I then create the links for all the tables, based on the SerialID-Server combination and if there is a problem, such as invalid server pathname, a Server info form appears which prompts for the correct server info. all table links are deleted and the process is repeated.
4) On exit all table links are deleted, but the boolean in the local file continues to point to the correct SerialID-Server info.