tags:

views:

287

answers:

9

A database-server serves all requests, weather coming from local-host or remote client and to listen any request, a database server must run on a port to listen requests on that port.

As far as i know, Microsoft access don't run on any port, and it is not possible to request Microsoft access on remote machine using

DriverManager.getConnection("URL", "user", "password");

but possible if your data-source is MySql, Oracle, etc... using,

DriverManager.getConnection("jdbc:mysql://ipAddress:portNo./schemaName", "user", "password");

(if i am wrong, please correct me).

Please u guys here help me with the concept, weather Microsoft access is a

a mere file for storing data (because it don't runs on any port),

or a database server (because for Microsoft-access Type-1 driver is available , it means it must be a data-source because drivers are only available for data sources).

A: 

AFAIK, MS Access is a database and you can connect to it through ODBC etc, but it is not a database server in the way SQLServer, MySQL, Postgres or Oracle are database servers.

Ryan Oberoi
A: 

Access is a file that can be attached to via the JET engine or many others. But it is a file. This means that if too many people attempt to connect to it there have been stories of it becoming corrupt and the whole db lost! It is not anywhere near as powerful as the other database engines you mentioned.

Andrew Siemer
How does it possible through jet engine (untill port no. is not specified, coz a data-base server listens request on a specified port only).A little more detailed explanation about jet-engine or dsn is highly appreciated. :-)plz don't mind Andrew (i m a newbie to jdbc)
rits
Incorrect. Access is a database application and not just a file. People might mostly just use the Access database file and ADO/ODBC drivers, but Access is still more than this.It is true that it's not as powerful as SQL Server or Oracle. Also, it is true that the database can become corrupt when too many connections are opened to Access, but as a whole, it is a database server.
Workshop Alex
Corruptions are almost always caused by flaky hardware or attempting to use Access via a WAN or wireless connection. I've never seen a case where it is corrupted by too many users. And I've read just about every comp.databases.ms-access and microsoft.public.access newsgroup posting mentioning corruption since the newsgroups were first created.For more information see the Microsoft Access Corruption FAQ at http://www.granite.ab.ca/access/corruptmdbs.htmI do agree that SQL Server and others are more powerful and more robust.
Tony Toews
@Tony Toews: "I've never seen a case where it is corrupted by too many users" -- In common with NULL, causation can be tricky to understand. Do mdb's go corrupt? They sure do. What makes them go corrupt? Editing MEMO column data via bound controls, using dot rather than bang operator, using Name Autocorrect or Compact On Close, not disconnecting cleanly, dozens more (you know better than i). The causation of corruption per se is users using Access. So while "too many users doesn’t equal corruption causation, it does surely increases the likelihood of corruption happening.
onedaywhen
+2  A: 

Microsoft Access databases can be used over ODBC or using a shared file system, so from that standpoint they can be considered multiuser databases.

This not really a database server from the standpoint that, there is not one location that serves queries up to clients. Unless you are using ODBC, each "client" has it's own copy of the database engine.

Access is not designed for many users, and does not have many of the properties that you normally think of when talking about database servers. Including scalability and robustness.

Christopher
For multi user environments (as described above) Access will work well as long as the number of users stays low. I would keep it close to 15. Many small businesses opt for this as a low cost database solution.
Praesagus
//Christopher saya that,Unless you are using ODBC, each "client" has it's own copy of the database engine.Does it mean, that, if client hits a query, then a copy of .mdb is first downloaded on his/her system, and the changes(made by the query) are not reflected in the .mdb file on the server
rits
what about the concurrency issues even if the no. of users stays low.
rits
No, Access does not download the entire MDB when you do a query. It makes use of indexes, so it only has to retrieve what it needs to from disk.Regarding concurrancy, we have 20 people using an Access application, and no problems with concurrency.I was recently playing around with loading IIS log files into Access. I had 3 million records. I was doing group by queries, etc, and the speed was not bad. Of course SQL Server is much better, but Access is often a great solution.
rowrow
thnx rowrow for the useful info. u provided.....
rits
+2  A: 

Access does not provide networked connectivity beyond a file share. There is no "Access" port.

jms
then how all Type of drivers are provided for access(Type-1 to Type-4) because drivers are supposed to be created for data-servers only.
rits
I'm pretty sure there is a jet ODBC driver to flat csv files.
jms
Yes, there are ODBC drivers for CSV files. And for tab-delimited files. Also for Paradox and DBase, which are also very primitive database systems. Then again, you can write an ODBC driver to basically use anything you like as a database.And I think you can even access Excel through ODBC...
Workshop Alex
A: 

It does not run on a port. It's just a file.

Jeff O
then how all Type of drivers are provided for access(Type-1 to Type-4) because drivers are supposed to be created for data-servers only.
rits
Who says? Where is it written that drivers are to be created for data-servers only?
Joel Mueller
i mean to say(in terms of jdbc), that drivers are for accessing servers, not files (if i am wrong plz correct me).
rits
Well, I don't know about JDBC, but ODBC has drivers for text-only CSV files, among other things. And however ambiguous the status of Access is, a CSV file is definitely not a server.
Joel Mueller
your comments are really helpful...cheers Joel :-)
rits
I can install SQL Server on a local system and set it up to only accept requests from local clients by just disabling TCP/IP and named pipes for the driver. It's still a database server when I do this. Same is true for Access.
Workshop Alex
JDBC and ODBC are just publicly defined APIs for accessing data. Any particular JDBC or ODBC driver is really just a library of function calls that wrap the data source in that API. The data source can be a database server, a set of structured files, a flat file, or a room full of people with headsets typing queries into google, the role of JDBC and ODBC is give them all a common set of functions for extracting the data.
Charles E. Grant
Actually Access (or rather the Jet Engine) does differ from SQL Server, MySql and the like. The servers all have dedicated processes that do all the work of managing and extracting the data. The client processes never touch the underlying files. If you used Jet, or Jet via ODBC your process will be opening the files and managing the locks itself. A client getting disconnected from SQL Server will never corrupt the database, while if your applications dies while it has an Access database open, it can be totally hosed.
Charles E. Grant
+1  A: 

MS Access is a file-based database system but technically speaking, so are many other database systems. SQL Server, for example, will store it's data in a single file and can behave in a way that's very similar to Access. Then again, SQL Server has much more additional features.

But is Access a database server? Well, that depends on your definition of what a server should do. It is possible to create an Access database and give it some server-like functionality by writing some code to "serve" your data to some client application. Been there, done that. And actually, Access has been popular in the past for several cheap-hosted websites as database to e.g. run a forum or guestbook on.

To make things more interesting, Access databases can be accessed through COM. And COM objects can be created on a remote system. So theoretically, through ADO you can already access an Access database on another machine.

Access is also reasonably able to handle multiple users and offers some basic security, if need be.

MS Access is also more than just a database file format, although most people tend to forget this. MS Access is part of MS Office and as such it provides much more functionality than just a file-based database system. (Then again, even Paradox is more than just a file-based database if you buy the complete product from Corel instead of just using the database files plus drivers.)

Btw, the term "server" can be confusing. You don't need to run something on a port to make it a server. Basically, a database server is just some program that provides database services to other programs and computers. With Access, you can technically do both, so yes: Access is a database server. (Albeit a very primitive one.)

Workshop Alex
Thanx for taking interest in my question Mr. Alex..... After reading ur reply, i got stuck into another issue.... An identity not need to run on a port to qualify the criterion of data-base servers. Then, will you plz, tell me why we need to specify port for MySql, oracle. Aren't port are there to listen any request (coming from local or remote client).
rits
MySQL and Oracle use ports to connect over the Internet (or intranet) to the system where the database is. But some databases can also be accessed through named pipes instead. In those cases, you don't need to set a port since the connection is handled by the operating system below the named pipe. All you would need to know is the machine name of the database server and the name of the named pipe. (You can connect to SQL Server through named pipes.)Local clients don't even need named pipes or ports. They could just use shared memory to send data back and forth.
Workshop Alex
i am a under-graduate, so don't understand much about these technologies like named pipes.....any source of information about named pipes is highly appreciated....cheers Mr. Alex :-)
rits
Best starting point for information would be Google and Wikipedia. The article at http://en.wikipedia.org/wiki/Named_pipes is already very useful. Named pipes is just a communication protocol between two or more applications and tends to be a bit outdated these days, since communication over TCP/IP is way more popular these days.
Workshop Alex
rits
Mr. Alex (looking forward to listen from u...)
rits
I've seen the post. The problem is clear: how to access an Access database remotely. The post talks about Java and Java doesn't provide much functionality to do this. But connecting to a remote Access DB is possible through several other techniques. Access won't work over named pipes, but you could create a service that would run on the same system as the DB and access this service through named pipes. But TCP/IP would be a better solution. Another technique might be through COM/ADO by creating an ADO connection on the remote system, but this isn't easy.
Workshop Alex
Another solution would be by putting the DB on a shared disk. A project I worked on is used by some users on a shared harddisk, with multiple users connecting to the same database, every user on their own system. We even have users who installed out product on a Terminal Server and then use remote desktops to start the application and to connect to the Access database. We want to help these users by migrating the whole project to use SQL Server but that takes a lot of time.
Workshop Alex
If you want to connect to Access through Java, then I think the easiest solution would be by creating your own service around the Access database that you want to make available. Web service, Windows service or just a COM class. there are just too many techniques to share a database. But they do require you to write additional code. (But that's more a limitation in Java, not Access.) To access the DB through HTTP, build a web service and expose some methods to manipulate the data.
Workshop Alex
My heartiest thnx to you Mr. Alex for all the support u are giving to me..... As u mentioned, creating an ADO connection on the remote system, isn't easy. And also, i am working on java technology, and know how to access Microsoft access on localhost(say, to implement a desktop application for window user), but after this long discussion, can we conclude, that, it is not possible to remotely access Microsoft access by direct writing a code in java using the jdbc API's (coz there are only theoretical discussions i have found while googling but failed to find no practical solution).
rits
+2  A: 

Access is not a database to begin with.

It is an application development environment that ships with a default database engine, Jet (or ACE in A2007, which is just an updated version of Jet), and that uses Jet MDBs or ACE ACCDBs for storing its application objects.

Your question is not about Access. It is about the Jet database engine.

Jet is not a server database. There is no process running on the server through which all communication with the Jet data store is managed.

Instead, Jet is a file-based database system. Each user runs Jet locally in memory, and opens the database file in shared mode. Locking of the database file is managed via the LDB file.

ODBC does not provide server functionality to Jet data. It is simply another user of a file.

David-W-Fenton
Scenario: .mdb containing a proc defined using this SQL DDL: CREATE GetCurrentTimestamp AS SELECT NOW(); on another machine, whose clock is 12 hours ahead of the machine with the .mdb, I connect to the .mdb and execute this SQL DML: EXECUTE GetCurrentTimestamp; will the value be the current date/time of my local machine or that of the machine with the .mdb?
onedaywhen
How are you accessing the Jet database? Via web server? Via ODBC? Via Access? The answer to the question depends on that, because the date will be determined by the system date of the computer in whose RAM the Jet data is being processed.
David-W-Fenton
Mine was rhetorical, intended to inspire thought about where exactly ACE/Jet is being run. But if you want to provide an answer, how about all three of yours? :)
onedaywhen
Via web server: Jet is running on the web server and the time will be for the web server. Via ODBC: So far as I can tell, Jet is running on the local workstation, so even if the MDB being accessed via ODBC is on a server, the time will be local to the user's Jet instance. But I could be wrong on this, as my exposure to ODBC is highly Access-specific. Via Access: Obviously, the time is that of the local user's workstation.
David-W-Fenton
Thanks, I think you are correct on all three.
onedaywhen
A: 

If you put the file on a windows file share, then protocol is SMB, the port is 445. The machine with the file is called a File Server, so in a sense, it is a server app, but MS-Access isn't the server, the SMB bits are. What SMB doesn't do that a real sql server would do is manage the concurrent access.

MatthewMartin
Are you sure you mean port 445 and not 137/139, etc.? You're right that this isn't an "Access" or "Jet" port, but simply the port for SMB networking. And you're certainly correct that that's the point -- your Jet data is accessed via your server's file sharing mechanisms.
David-W-Fenton
+1  A: 

In determining whether something is a server or not, the issue of whether it has ports is a red herring. Ports are simply one means of interprocess communication. As others have already noted, other servers use named pipes or shared memory to communicate with clients.

The architectural feature that really makes a server is process isolation. This is true whether you are talking about web servers, database servers, or display servers like X Windows. In each case you have some important resource that you want to guard very carefully. Therefore you don't let anything but a few select processes touch it. If another process wants access to that resource, they don't get to work with it directly. They have to send the server process a message, "Hey server please perform operation X on Y and send me the results". The channel used for sending the message is relatively unimportant, the key point is that some independent process is charged with managing the resource. Contrast this with Access (or as somebody pointed out more correctly the Jet database engine). If your application uses an Access database, then your process open file handles on the database, performs the record locking, and does the index lookups. This is all conveniently hidden by many layers of library calls, and it probably involves many switches to kernel space, but in the end it is still your process that is getting all the CPU cycles and doing all the work. This is true even if you are accessing the Access database via ODBC, which is really just another layer of library calls.

Charles E. Grant