support the 30-50 users this application will be used co-currently by,
having used Fox Pro databases in the past I am more confident of its
ability to hold up with this many users (many more than the database
was originally intended)
I *really* doubt that dropping native access to a mdb back end
and going to a fox back end is going to be more reliable. You
adding a complex ADO + fox driver "software" layer here that
you did not have before. and, ms-access is still going to be
loading the native "JET" data engine it needs anyway.
So, you adding layers of software here.
If anything, you wind up with a LESS stable
system. Now, your system will have to open table, read table (perhaps
close table at this point). Put data into form. After we edit, we
then take data from form, re-open table, re-execute sql to write back
to that table with sql updates. You more then doubled the steps and
work then just letting access update the table direct like it does
now.
Further, this approach could wind up using MORE bandwidth then
letting ms-access do a NATIVE update to a mdb file. Remember, in the case of
letting ms-access do the update, there is NO odbc, no
extra ADO layer, and I am quite sure that NO sql statements need be
parsed to make the update. Note that just to parse the sql, the sql
has to be *checked* against legal fields in the back end.
So, you likely use LESS bandwidth by leaving the tables open and
using native mdb file for the back end. All of your open/close,
read/load data into form, and then write back out + open/close
connection stuff can actually cause MORE bandwidth to be used
then just letting ms-access update a record it just read
into a form.
Ms-access is able to raw update that table, and,
access is NOT using odbc to connect to the
back end...it a native update system.
I do not see ANY reasonable argument here that moving the back end
to a Fox db, adding additional layers of code and ado.
I don't think you gain anything here. And, the argument that a
Fox back end is going to be more stable is weak.
(all those who developed in FoxPro, raise
your had if you ever had a corrupted index (everyone in the room will
raise their hand)).
So, I really doubt you going to gain additional
stability, and I doubt you gain ANY performance here. The ONLY reason
why you might gain performance is because your FORCING your design
to only load the one record to the form, and you should do that
in ms-access anyway.
With bound tables in ms-access, you don't need to write any update
code, and you seem VERY sensitive to time + cost issues here, and yet
are using up large amounts of developer time to write a bunch of update
code? You could use that time to migrate to sql server.
You not going to gain any more stability or performance here in my IMHO.
In an ideal world I would have Web based application served by a SQL
server, however what I can only describe as "red tape" means this
would have to be done by external suppliers who have an awful habit of
charging significant amounts of money!
You do realize there is at least 2, perhaps 4 free versions of sql server
available from Microsoft? The time and cost to re-write this stuff
to use ado, fox is likely the same for migration to sql server.
Happy to take any board any suggestions for alternative development
tools, given the current constraints.
I would first check if your existing application is correctly setup.
As long as you do the following, you should get good performance, and
stability:
1) split the databae (that likely a given on your part)
2) always distribute a mde to users.
3) NEVER open up a form bound direct to a table unless you use a where
clause.
(so, bound forms are ok, but you MUST restrict the records loaded. With
a small table of 100,000 records, the time to load the form will be same for
a table of 1 record *if* you respect this approach. Here is quick example of
a typical way to "restrict" records (eg: ask the user BEFORE you load the
form
http://www.members.shaw.ca/AlbertKallal/Search/index.html
This also means that as a general rule you not need, nor allow the
navigation buttons
in he form because you load only one record.
Further, once you split the database, and reduced the number of records that
flow to a form, then you 90% of the way to having a application is VERY
close to a good setup for running the data from sql server. So, assuming you
do eventually get sql server, then you simply move your back end data from
the mdb file to sql server, and then link your front end tables to sql
server. At this point, 90%, or more of your code and forms will work "as is"
WITHOUT having to write ANY code. so, you simply tweak that last 10% to work
with sql server...
There were two reasons I did not consider odbc:
1) As I understood it the visual foxpro odbc drivers have not been
updated since foxpro 6, version 8 contains new features which the obdc
driver does not recognise (such as auto-increment). If anyone know
differently or knows of a driver that will work with vfp 8 features
please let me know.
I not heard the above. I would assume that the latest drivers for
fox would support the basic functions you speak of. Further, any
reason why you can't used a supported version of fox for the back
end.
2) In terms of performance I always thought that using adodb
connections would be more efficient than odbc connections. Not quite
sure why I thought this....How does adodb compare with odbc in terms
of performance?
In general, there not much difference. This is *especially* so when using
a file share, and NOT a server (and, that is our case until you spring
for sql server). However, with ms-access, you not using
a odbc layer, you not using a ADO layer, you using native JET to the mdb.
Now, your proposing to throw in ado layer that you did have before, and
also the FoxPro driver which also has to be loaded and run in addition to
ms-access. Lots and lots of more
layers of software you adding here.
I don't think you gain a thing in terms of stability, or performance
if you have a good desing now...