R
ReidarT
Are there any limitations by using a backend-database connected through an
ODBC-connection and how is the performance?
regards
reidarT
ODBC-connection and how is the performance?
regards
reidarT
"Billy Yao [MSFT]" said:Hi ReidarT,
Thank you for posting in the community. My name is Billy and it's my
pleasure to assist you with this issue.
From your description, I understand that you would like to know some
existed limitations when you use an ODBC Driver for Access to connect a
backend database. Additionally, performance is also your concern using this
method. Have I fully understood you? If there is anything I misunderstood,
please feel free to let me know.
Based on my experience, it is recommended that one does not place Jet
database files (.mdb) under high user loads more than 15 instances.
Otherwise, you he receive the error message '-2147467259' indicates that
the database has been placed in a state by an unknown user that prevents it
from being opened or locked.
307640 PRB: Error -2147467259 When You Try to Open the Same MDB File from
http://support.microsoft.com/?id=307640
The workaround in the following article extends the retry delay for Jet so
that you can use additional instances.
However, it sacrifices the performance in some cases may be the most
importance thing for you. In this high user loads scenario for the
performance benefits, we recommend you use SQL Server Enterprise Edition or
Standard Edition so that you are allowed with more concurrent users and
instances.
=================
On the next place if you use an Access project (ADP), when you try to link
to a particular data source when you are using an Open Database
Connectivity (ODBC) File Data Source Name (File DSN) connection, you Cannot
Link Tables into the Access Project by Using an ODBC DSN connection.
For detailed information, please see the KB below:
287414 You Cannot Link Tables into a Microsoft Access Project by Using an
ODBC
http://support.microsoft.com/?id=287414
==================
Last but not the least, for the better performance and Jet engine threads
safety; I suggest you using Microsoft OLE DB Provider for Jet instead of
ODBC for Access. The reason why I prefer OLE DB Provider for Jet is as
below:
When going through our OLEDB provider, Jet 4.0 is thread safe, though we
are not really a true multi-threaded database engine. Jet spawns multiple
threads to do tasks in the background. For incoming threads, our OLEDB
provider basically caches the threads and manages them going to Jet, but
Jet can only process one thread at a time (kind of like Win3.X did time
slicing of multiple tasks).
Access ODBC Driver (ODBCJT32.dll) is generally not as thread-safe as JOLT
(Jet OLE DB Provider). Both the ODBC driver and the DAO code (and Access,
for that matter) use an expression service that is not thread safe and is
not tested on generic thread-safe scenarios. The ODBC driver has the most
testing of the three listed here, but it is not generally recommended for
ALL high-stress scenarios. Some multi-threaded scenarios will function
relatively well, but even those aren't "recommended".
JOLT is a bit better than these options because it has components that are
all supposed to be thread-safe (as opposed to "hoping" they are thread safe
in the scenarios customers use most). Even then, while JOLT will function
through IIS, that doesn't mean you should run your business on it. It is a
single-user/few-user database engine that works well for simple multi-user
scenarios. It does not scale well at all. So, if you are running many
threads against a single instance of the engine (say, an IIS scenario with
a lot of inserts, for example), you will get more conflicts when running
with Jet vs. SQL Server. That's the difference.
If you want to use Jet/JOLT for one of our shipping products where you
control all of the threads and have controlled usage patterns that work
well with Jet, you can most likely use JOLT/Jet to solve your problem.
People do this now in shipping boxes successfully. However, if you use
threads to encapsulate multiple users (i.e. as a scaling mechanism),
understand that you're going to run into lock conflicts, database bloating,
etc.
It is capable of running on multi-processor machines, but it won't take
advantage of the multiple CPU's.
When going through our OLEDB provider, Jet 4.0 is thread safe, though we
are not really a true multi-threaded database engine. Jet spawns multiple
threads to do tasks in the background. For incoming threads, our OLEDB
provider basically caches the threads and manages them going to Jet, but
Jet can only process one thread at a time (kind of like Win3.X did time
slicing of multiple tasks).
For more information on thread safety for DAO/Jet, I include the following
article for your further reference:
169395 PRB: Thread Safety for DAO/Jet
http://support.microsoft.com/?id=169395
========================
ReidarT, does this answer your question? Thank you for your patience and
cooperation. If there is anything more I can do to assist you, please feel
free to post it in the group. I am standing by to be of assistance.
Thank you for using MSDN Newsgroup!
Best regards,
Billy Yao
Microsoft Online Support
ReidarT said:Thanks alot
I have a few questions
1. Is it a reasonable solution to use an sql backend and connect to the
sql-database through ODBC? or
2. Do I need to make an ADP-project of my existing access frontend database
to connect to the sql-backend?
ReidarT said:Thanks again for very good answers.
As I understand it, the best way for performance and correct handling of
views instead of queries, you use an adp-project.
1. Is there any performance differences between an adp project and an
access-database?
2. Would it be better to use vb.net where I compile the project, concerning
performance and stability?