On Wed, 29 Jun 2005 15:10:03 -0700, "John Welch" <jw****@fred.com> wrote:
I have a potential client who wants an application with about 20,000 records
and 5-8 users. I told him that Access would work fine, but he wants to go
with an mdb front end linked to SQL Server tables. My experience is solely
in Access (single user) and I'm trying to decide whether to take the job or
pass. I assume I'd just create the tables in Access and then upsize them
with the wizard to get started. After that I don't how much the development
style would be different from just a normal Access application. What I'm
looking for is something like "The top 10 (or 20) most important things to
do differently when developing a multiuser mdb with a SQL Server backend."
Can anyone point me to a relevant document or book or just give me some
ideas to think about? I have the Access 2000 developer's handbook, which I
love for single user stuff, but which I'm having a hard time following for
the client/server stuff.
Here's my 2c in order of importance - most important first.
1. Keep result sets small either by filtering with where clauses or by
agregating with group by clauses, or both. Filtering forms, and limiting
subform results by master/detail relationships does -not- do this.
2. Unless your back-end will be shared by multiple applications, ignore any
advice you might find saying that all your queries should be implemented as
stored procedures. Doing that might gain you some performance here and there,
but the extra complexity will greatly slow, impair your user interface, and
lead to more costly bugs. It is also -not- tru that Access must read all the
records from the server to perfrom a filter or a join - JET passes these
things to the server unless you abuse function calls that can't be passed to
the server.
3. Except for simple lookup tables, all your tables should have IDENTITY
columns. This will improve update performance, prevent false update conflict
errors, and prevent users from inadvertently overwriting each other's long
text field updates with no warning or error messages.
4. Tables should have either no clustered index or use the primary key as a
clustered index. If you have good reason to use a clustered index that is
-not- the primary key, link to a view of that table instead of linking to the
table directly, and specify the primary key field when linking.
5. In the odd cases where you do need to move a query to the server for
performance reasons, use views when you can, and only use stored procedures
where views won't do the job.
6. Don't bother with any up-sizing wizard. To do it right, you'll have to do
it yourself. With scripts and code to do your upsizing steps, so you don't
have to re-do them manually if you have to start over. The steps are...
a. Create tables with no keys or indexes
b. Link tables form Access
c. Insert data into tables using INSERT queries from Access
d. Create indexes and primary keys on tables
e. Relink tables in Access
f. Create triggers and declared relationships
You can use scripts for a, d, and f. If you want, you can drive the whole
thing from Access using a series of pass-through queries in place of each
script.