473,406 Members | 2,390 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

Top 10 Issues with mdb front and SQLServer back end

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.
Nov 13 '05 #1
6 1751
"John Welch" <jw****@fred.com> wrote in
news:d9********@enews2.newsguy.com:
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.


Two things:

1. read the sections on optimizing multi-user apps in the
appropriate ADH version, and then the Enterprise sections, which
deal with using Access with SQL Server.

2. if you can get it (it's out of print) try to acquire a copy of
SQL Server for Access Developers. It's a great book.

--
David W. Fenton http://www.bway.net/~dfenton
dfenton at bway dot net http://www.bway.net/~dfassoc
Nov 13 '05 #2
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.
Nov 13 '05 #3
Steve Jorgensen wrote:
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.
Abuse isn't an issue, you may simply have a function in a query like
Nz(), the equivelant in T-SQL is Isnull(), which is also the name of a
different function in Access. This makes translation to T-SQL very
difficult.
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.
Don't you mean timestamp columns?
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.


You won't be able to do c without a PK or unique index on the table,
Access will treat it as read-only.

--
[OO=00=OO]
Nov 13 '05 #4
On Thu, 30 Jun 2005 08:31:27 +0100, Trevor Best <no****@besty.org.uk> wrote:
Steve Jorgensen wrote:
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 development, 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.


Abuse isn't an issue, you may simply have a function in a query like
Nz(), the equivelant in T-SQL is Isnull(), which is also the name of a
different function in Access. This makes translation to T-SQL very
difficult.


"Abuse" means using it somewhere that must be processed prior to the output
stage. In other words, it's fine to say "Select nz(Sum([xyz],0) ...", but
it's not fine to say "Select Sum(nz([xyz],0)) ...". Likewise, even
"nz(Sum([xyz],0)" in a HAVING clause will make Access process extra rows,
though it might be fine where the unfiltered set will always be small anyway.
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.


Don't you mean timestamp columns?


Yes - thanks for the correction.
6. Don't bother with any up-sizing wizard. To do it right, you'll have to do
it yourself. Use 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.


You won't be able to do c without a PK or unique index on the table,
Access will treat it as read-only.


Not true - what you can't do is update data in the tables using a recordset.
INSERT queries work just fine, though. I assure you I have used this process
on several occasions, and it works perfectly (also note that "e" and "f" may
be reversed if desired).
Nov 13 '05 #5
Bri

John Welch 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.


In addition to the very good points made by others:

- Timestamp Field in every table. OK, this point was already made, but
it is important enough to mention again.
- Getting Identity Field Value in Recordset Add. If you add a new record
to a recordset on an Access table, the Autonumber field value is
available before you Update (to save the record) so you can store it to
variable for later use. With SQL Server the Identity Field value is not
generated until you Update and so is not available until then.
- If opening a Recordset that doesn't need editing use dbOpenSnapshot
(good idea for Access backend too, but makes a bigger difference in SQL)
- If you use db.Execute use dbSeeChanges.
- Use Access queries for everything to begin with. Access will figure
out what requests need to be sent to the server and the processing will
happen on the server and the results will be returned to Access. If you
get a query that Access has decided it can't figure out what to send to
the server, then it will decide that it will perform the query locally
and will then pull all of the data to the client and then do the query.
If you come across one of these queries, then you have two choices: If
you want to retain the logic completely in the FE and do not need to
edit the query results then use a Passthrough Query, otherwise create a
View on the server or if a View is inadequate then a Stored Procedure. I
find that sometimes creating a View of just one part of the query is
enough to simplify the Access query so that it will be able to now pass
the request to the server. Remember that Passthrough queries, Views, and
SPs must be written in T-SQL not in Access's flavour of SQL. This is why
I suggest only worrying about them as a last resort.
- Visit Tony's page where he lists lots of tips and resources:
http://www.granite.ab.ca/access/sqlserverupsizing.htm
- For a good list of the differences between Access and SQL Server go
to: http://www.aspfaq.com/show.asp?id=2214
--
Bri

Nov 13 '05 #6
"John Welch" 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.


Have you explained to the client that if he goes with SQL server tables,
they will need more Tender Loving Care than Access, on a continuing basis,
so he will have need of hiring or contracting at least a part-time Database
Administrator (DBA) with Microsoft SQL Server experience? (And, that is not
your line of work, and he needs to get the DBA first, now, to create the SQL
Server database to which you will line.)

That's worked for me... the client asks "How much do DBAs get per hour?" and
I respond, "Probably at least twice as much as I do." Then he says, "I want
you to do it." And I respond, "That's not my line of work. If it was, _I'd_
get twice as much per hour."

-- At which point the client says "And you say that it'll work just fine
with Access tables, no matter what Ol' Charlie over at Acme told me?" And I
assure him that "Access tables will be fine."

-- Or the client says, "Oh, I know a DBA I can contract." or "Do you know a
good DBA that I can contract?"

And in either case, we go forward from there. I've been politely told "We'll
think it over and call you." but I've never been physically thrown off the
premises.

I believe I am about, however, to delve a little more deeply into SQL
Server, more because I am intrigued with what is coming down the pike (SQL
Server 2005) than because I'm worried about doubling my rate. Not, of
course, that I've ever objected to making more per hour... <GRIN>

Larry Linson
Microsoft Access MVP
Nov 13 '05 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Ian Baker | last post by:
We have been developing in MS Access/VBA for nearly 10 years now and find we need to get with the times and look at a web type of front end to a more robust/multi user back end. I would be...
3
by: aaj | last post by:
Hi all I have Aceess 2000 front end linking to SQLServer 2000 BE. While developing the backend I work on an offline database. When happy I update the live one. Any changes I've made to the...
4
by: John Q. Smith | last post by:
I'm trying to find out some of the details behind OOP state management with SQL Server. For instance - how long does the session object live on any server? Is it created and destoyed with each...
10
by: Robert | last post by:
I have an app that was originally 1.1, now migrated to 2.0 and have run into some sporadic viewstate errors...usually saying the viewstate is invalid, eventvalidation failed or mac error. My web...
2
by: Jim Devenish | last post by:
I am in the early stages of converting a back-end .mdb file to SqlServer - my first attempt! I have used Data Transformation Services to copy all the tables to SqlServer into a database named...
11
by: Max Vit | last post by:
I have deployed few Access apps splitting it in Front End and Back End. Our environment uses Win XP SP2 for clients, Win 2k3 for servers and Access 2003. The max. number of clients is about 50...
2
by: satchi | last post by:
Hi, I have recently converted an Access front/back-end app into a SQL Server (2000) back-end database from a front-end MS Access (2003). The tables are linked via ODBC. I want to add a new...
1
by: AirborneBob | last post by:
I created a database (Access '07, MS Office XP Pro) with a front end and a back end. The back end has the data tables and the front end has the forms, queries etc. My friend has been using the...
2
by: time_error | last post by:
Please bear with me - I’m quite new to MSSQL and the whole db domain. The db itself is pretty simple. There are approx. 15 tables. The two largest tables’ holds a total of 10 mill. entries. ...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.