Slashdot Mirror


Sharing MS-Access Databases, Efficiently?

codewizard asks: "Ours is a bank and we have a bunch of MS-Access databases(>50) which are being used by around 50 users around the globe on a daily basis. The set of databases are stored on a SAMBA share and each user accesses from the mapped drive. As expected, sharing conflicts arise and multiple users are unable to access at the same time. So, we proposed having multiple folders on SAMBA each of which would have all the databases and the users logon script would determine where their mapped drive points to. This led to synchronisation issues (when a change is required in one of the master databases, we need to manually synchronise all other folders) and increase in storage size in SAMBA. Anyone have any other ideas on how you would have gone about sharing these MS-Access databases?"

98 comments

  1. *ditch* Access, sorta by TrebleJunkie · · Score: 4, Informative

    Seriously. Port the data itself to MySQL, PostGres, MSSQL7 (If you're a bank, you can likely afford it. ;) ) or something like that.

    If you have custom front-ends built in Access, you don't have to abandon them -- using ODBC, link the tables from the database server to the forms/reports/queries you're using now in the Access database. It may take a little bit of doing, but I think you'll find it'll work much better.

    --

    Ed R.Zahurak

    You know, oblivion keeps looking better every day.

    1. Re:*ditch* Access, sorta by eakerin · · Score: 5, Informative

      I have to agree with this, where I work we had many Access databases spring up over a few years (ie, not developed by IT) , and people started complaining to us when they started breaking.

      For some of them we just fix the corruption, and move on with life, but for the ones that were used more often/break more often, we converted them to an Access Front End (and therefore no code changes) and a MS SQL 2000 Backend. (please no flames, we are currently a MS Shop, and that's something I'm already trying to fix. :)

      This Solution works well for this kind of system, no data curruption problems, and we don't spend 3 months re-writing the whole thing with no gain but stability.

      Now on to the Helpfull hints if you attempt this:
      1. Using DSNs in ODBC is a pain, Write some code to automatically create the DSN when the database loads,if it's not there already. so that users just have to open the database and it works, same as before.
      2. if your using MS SQL 7/2K, use NT security for user access, it will simplify life a lot, that way you won't have to create a SQL user for everybody
      3. it looks like your using a nix derivitave already, just try postgres on your existing server (or if you can, setup a new one), and test the heck out if it. I can't provide any insight into problems, cause I don't have any access-postgres databases running right now.
      4. If you have access to MSSQL 7/2K, even of you don't plan on putting the data into a MS Database, DTS Import/export wizard will be your best friend in this endeavor. It will make life VERY easy to transfer the data from an access DB to ANY other ODBC Datasource (so pretty much everything, including flat files) You basically say, copy data from here, to here, and these are the tables I want. Hit go, wait a while, and when it's done you have all of your data tables nicely transfered to the new server.

      Going this route you get the best of both worlds, the Stability you need, and the short developement cycle everybody wants.

      Hopefully, if you end up going this route, some of this information will help.

    2. Re:*ditch* Access, sorta by Anonymous Coward · · Score: 0

      We have been using an access front end with a progress back end for two years, and it works fine. The biggest problem that we had was when we changed to office xp, some things did not work right in access; most of the file conversions were easy though.

    3. Re:*ditch* Access, sorta by Fished · · Score: 2, Informative
      it looks like your using a nix derivitave already, just try postgres on your existing server (or if you can, setup a new one), and test the heck out if it. I can't provide any insight into problems, cause I don't have any access-postgres databases running right now.
      One that I know will be an issue is that, out of the box, auto-increment fields won't work. This is fairly easily fixed, or just run MySQL instead.
      --
      "He who would learn astronomy, and other recondite arts, let him go elsewhere. " -- John Calvin, commenting on Genesis 1
    4. Re:*ditch* Access, sorta by King+of+the+World · · Score: 1
      with a progress back end
      You can always tell when a slashdot poster is just dictating to their secretary.
    5. Re:*ditch* Access, sorta by Khazunga · · Score: 1
      One that I know will be an issue is that, out of the box, auto-increment fields won't work.

      See here:

      Thus, we have created an integer column and arranged for its default values to be assigned from a sequence generator.
      They're just not special types, but a reasonable use of sequences and default values.
      --
      If at first you don't succeed, skydiving is not for you
    6. Re:*ditch* Access, sorta by Fished · · Score: 1

      My point was just that, if you export an access table into a postgresql database, auto-increments will not work without some tweaking. Make sense?

      --
      "He who would learn astronomy, and other recondite arts, let him go elsewhere. " -- John Calvin, commenting on Genesis 1
    7. Re:*ditch* Access, sorta by Khazunga · · Score: 1

      No tweaking is needed. There are a handfull of scripts which will translate the database dumps, and create sequencing for you, among other things.

      --
      If at first you don't succeed, skydiving is not for you
    8. Re:*ditch* Access, sorta by Anonymous Coward · · Score: 1, Informative

      Dude, use pgAdmin II, it has a module to migrate data from Access (97, 2K, XP) and MSSQL. I tried it with a relatively large (40 tables) Access file, and it worked like a charm, autonumber->serial and all.

    9. Re:*ditch* Access, sorta by TheLink · · Score: 1

      No. Doesn't make sense. It's effectively the same issue with your MySQL suggestion.

      --
    10. Re:*ditch* Access, sorta by boots@work · · Score: 1

      Nice image.

      But it's not necessarily a misspelling of "Postgres". There is a relational DB called Progress, and it's actually rather nice. In particular the integration between the scripting language and the database is very clever indeed.

      It's a shame that they didn't manage to catch the internet wave more fully, by being more open, and adding cgi support, and porting to Linux. I remember trying to run the damn SCO binary under iBCS2 years ago.

  2. Why sharing? by elmegil · · Score: 1

    I thought Access supported network attach via a DBI. Why don't you have a central, or semi-central DB server or servers with the applications going through DBI to get to the database? Using MySQL that would be a sinch.

    --
    7 November 2006: The day Americans realized corruption and incompetence weren't addressing 11 September 2001
  3. Obvious answer: by DetrimentalFiend · · Score: 1

    SQL server. Access was never designed to do what you're doing. I doubt that a SQL server will use much more CPU and it shouldn't be too hard to re-write the access stuff from SQL. Even if it were only two users using it, I would have designed it to be SQL based from the beginning.

    1. Re:Obvious answer: by RupW · · Score: 1

      I doubt that a SQL server will use much more CPU and it shouldn't be too hard to re-write the access stuff from SQL.

      You're shifting the responsibility, though.

      The access solution is just using the 'server' machine as a file server; high bandwidth but low server load. Running SQL server shifts most of the operation to the server machine; lower bandwidth for DB access but high server load.

      You really do need a dedicated machine for SQL server, and one with *lots* of RAM. Obviously you can distribute the databases between machines as long as you're willing to buy the licences.

    2. Re:Obvious answer: by lpp · · Score: 1

      Although you are right in that SQLServer doubtless will consume more resources than Access, the main problem being considered here appears to be the synchronization problems. When everyone was using a single SAMBA share, some would get locked out and when multiple shares were used, manual synchronization had to be performed.

      By going with SQLServer (or another database) and using ODBC for connectivity, you place all of the synchronicity issues into the hands of a database server, which is typically built to handle just exactly that, and the front end is handled by the client.

      Seems a reasonable solution to me.

  4. upgrade to ms sql server by zeenixus · · Score: 1

    iirc, microsoft sql server will support and/or import access databases, so you can start small and grow as needed. And as others have posted, you can still use the access front ends. but in any event, you _need_ a real rdbms.

    --
    In Bob we trust.
  5. By the time I finish, this will be redundant... by Violet+Null · · Score: 4, Informative

    Don't use Access.

    No, seriously. It's not made for multi-user access. Use SQL Server, which is easy enough for Microsofties to translate over to (SQL Server 2000's table design now looks almost exactly like Access'). Or use MySQL or PostGres, if you don't want to shell out bucks. Boom. No more multi-user issues.

    If you've got forms or reports or what have you in Access, translate all the data to some other database anyways, and then use linked tables. You'll save yourself so much heartache. If this database has updateable data, you may have to worry about concurrency issues, but it'll be piddly compared to "every user but one is locked out".

  6. Which Bank? by Anonymous Coward · · Score: 0

    I would like to know so I can avoid it. Using Access for anything other than a front end on such a scale seems pure folly. The few Access installations in a network environment have been troublesome at best.

    Why isn't a large, global bank using decent technology?

    I am sorry to offer no help on "ask Slashdot" but this to me seems irresponsible, even if the data in these DBs is non-sensitive, non-mission critical.

    1. Re:Which bank? by Anonymous Coward · · Score: 0

      if it's MY bank, our relationship is over

      What he didn't say is that it's a sperm bank....

    2. Re:Which bank? by jbolden · · Score: 1

      I think you'd be in for a serious shock if you ever got to see whats used at most banks. You remember all those bank mergers over the last 2 decades? You think all the IT infastructure got merged? No they did the typical corporate thing, grab the boxes and fire everybody from the old company who understands what's on them. Pass serious rules against making any changes and pray.

      Don't be suprised if a critical system is running on foxpro or paradox much less access.

    3. Re:Which bank? by buzzcutbuddha · · Score: 1

      Seriously, I know that things are most certainly less rosy than this at most banks around, but my friend, you took the words right out of my mouth.

      For the love of God, Access????

      Access?

      Bah. I'm going to start hiding my money in a mason jar again.

    4. Re:Which bank? by mink · · Score: 1

      Much of it is/was using OS/2

      --
      Well I've wrestled with reality for thirty five years doctor, and I'm happy to say I finally won out over it.
  7. Isn't the answer obvious? by Wonko42 · · Score: 2, Insightful

    This is the dumbest question ever.

    1. Re:Isn't the answer obvious? by WasterDave · · Score: 5, Funny

      Fucking breathtaking, innit. Made all the worse by being prefixed with "codewizard asks".

      --
      I write a blog now, you should be afraid.
    2. Re:Isn't the answer obvious? by trentfoley · · Score: 4, Funny

      In this case, "codewizard" is referring to the new Microsoft Access Code Wizard. Apparently, someone at the bank clicked on the "debug" button in the error message dialog they got when their Access database was locked. This, of course, launched the "codewizard" which promptly generated and submitted this Ask Slashdot post.

      It could happen... right?

    3. Re:Isn't the answer obvious? by MaggieL · · Score: 2, Insightful
      In this case, "codewizard" is referring to the new Microsoft Access Code Wizard... It could happen... right?

      Erm...no. MSFT is achingly anxious for all these bandit Access tables to eventually end up in a SQLServer, where they will make money on them by the seat *and* by the server.

      Surely any Wizard written by MSFT would be pointing the end-user in that direction. Slashdot would be the very *last* place they'd be sent.

      --
      -=Maggie Leber=-
  8. use MySQL by alonsoac · · Score: 2, Funny

    One thing you could do is drop Access and use MySQL or keep Access to feed the data but have frequent exports into MySQL which are in turn queried by all the people around the world, it would work if most of them only need to take a look and not change things.

    Maybe even my company can help you with this.

    http://managedaffiliateprograms.com/contact.php

    1. Re:use MySQL by jbolden · · Score: 1

      OK if you do this for a living I have a question. Access's SQL parser is actually richer than MySQL's, what do you do with SQL statements that MySQL can't handle?

    2. Re:use MySQL by alonsoac · · Score: 1

      Well yes that's a pain sometimes. It depends on the application. I converted one application for a client to MySql very easily because all SQL was simple. There is another one I made that I have wanted to convert from Oracle but some queries are very complicated (Oracle I think is even richer than Access) so I haven't had the time to do it yet.

  9. Somthing wrong here.. by zulux · · Score: 5, Informative

    Several things:
    Unless your users at accesing the .MDB files over slow links, you should have no trouble with at all. Be *SURE* that you've split your Access database in two .MDB parts - the front (graphical, reports) and the back end (data). Link the tables in the frot-end to the data--end.

    Also - have the front end copied over to the users hard drive - this limit network usage and will cause their local copy of the .MDB to be modified if you have code that doese things like this_form.width = 400. Access tries to get write access on the scewiest of things, so you don't want the data part of the database to suffer just because Access it rtying to get write access on a form.

    Turn on oplocks on your Samba config for the data .MDB files.

    Get a real database: Access (with its .MDB files) has to read large chunks of data over the network in order to run it's queries. If you do a select * from customers where customer_city = "redmond" Access will read the entire customer table over the network. Yuk.

    If you give the same query to PostgreSQL, MySQl, or DB2 - only the query is sent to the server, and only the relevet rows are returned. A much lower bandwidth requirement - you can reasonable expect to run a properly designed database over a 56K modem conection with good results.

    --

    Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

    1. Re:Somthing wrong here.. by Deideldorfer · · Score: 2, Informative

      This guy is right on! I have an Access database for 16 users on a Samba share. It ran like crap until I: 1. Split the forms/reports from the data 2. Copy the forms/reports MDB to their local computer every login. If you skip 2, you may find that your forms/reports MDB gets very large and very slow. It is also convenient for distributing changes. As it is, I run into 1 corrupted record every 3 months or so, which is too often for my tastes. I am currently remaking it with mySQL and PHP so I can get rid of some of these crummy Win98 machines.

      --

      Power off before disconnecting connecting connector. Seen on a cash register
    2. Re:Somthing wrong here.. by schotty · · Score: 1

      I used to work for a company that, at one point, had ~70 employess that nearly all needed access to one or more of a dozen .mdb files on an NT4 fileserver. No problem whatsoever to get all of them to work together. The one issue that I had yet to see or hear about its' resolution, was a safe way to keep the idiot user from trashing the db when (s)he quits out imporperly. Seriously, the parent here is most correct. This was at an all WinBlows shop, except my terminal ;D But nonetheless you should not be having issues.

      --
      Sigs are nice guns ...
  10. Sweet Jesus by recursiv · · Score: 2

    Stop fighting it. Just get a real database. Why are you so hell bent on using Access? What you are describing is far beyond the scope of what anyone ever imagined when designing Access. Why are you trying to simulate the features of a real database, when they already exist, and they're good too... I'm seriously puzzled.

    --
    I used to bulls-eye womp-rats in my pants
  11. I think you've got the same answer many times by jsse · · Score: 2, Informative

    but I speak out of my own experience.

    First, as someone previously mentioned, Access is not meant for multiple access. I'm surprised you managed to support >50 access databases for ~50 users. Local access alone creates multitude of problems, not to mention global access. I remember the days when they've to yell for access an Access database for update, kinda like manual locking mechanism. :)

    Second, some people above mistook your usage of database is a pure RDBMS alone. Access itself is an application which embedded its programs and database into one big file. I fully understand the problem of porting Access to other means like MYSQL+Java. To minimize the impact of porting existing Access database data and applications, I recommend implement an extra applcation locking to each Access file when somebody request an update. You can also implement a single sign-on system for all ~50 Access database, this way you can have more justification for the changes. (this is much better than the manual 'yell-locking' I mentioned :)

    Third, do as they said, port to MySQL+Java. It worths the trouble. :)

    1. Re:I think you've got the same answer many times by schon · · Score: 1

      I remember the days when they've to yell for access an Access database for update, kinda like manual locking mechanism.

      What you're referring to is known as MAL, or "Manual Audio Lockout".

      I first saw this described in an Amiga tech manual.. ultra-low-end "networking" by hooking up the SCSI chains of two (or more) Amigas to share files.. Due to disk cacheing, if you had multiple users you had to perform a MAL before doing writes..

    2. Re:I think you've got the same answer many times by sohp · · Score: 1

      AKA Patch Pumpkin. Who has the pumpkin?

  12. SQL Server by droyad · · Score: 1

    We've developed a medium sized application in Access with a SQL backend. All you have to do is set up ODBC datasources and have a SQL Server backend by linking the tables to it.

    It's a piece of cake, and you can have the Access database on the client as no data is stored in them. Plus you can also consolodate all that data into one big database which would be usefull for backup and maintenance.

    Also Access databases have a tendency to corrupt, so never store data in them.

    1. Re:SQL Server by delus10n0 · · Score: 2, Insightful

      Linked tables are the worst way to do things in Access.

      Access has this nice "feature" where it sometimes decides that the ODBC data source can't do the proper filtering (especially when you're using Access's query editor, which has it's own functions for strings and dates) and this causes Access to grab the ENTIRE table and do filtering on the client's computer (running Access.) How insanely stupid is that? Don't even get me started on the amount of locking it does, or the amount of network traffic it generates.

      You should be using pass through queries and stored procedures as often as you can be. That's the only proper way to code in Access. If you can't do that, you should be making a web interface or something else.

      --
      Not All Who Wander Are Lost
    2. Re:SQL Server by Baikala · · Score: 2, Insightful

      ..Don't even get me started on the amount of locking it does, or the amount of network traffic it generates.
      Remember that he stores all those access 'databases' in a samba share. Rigth now, moving and locking entire tables ocurs for every god damed query, network traffic can't get worse than that... well maybe moving the entire database for every query could be a little worse.

      --
      16,777,216 comments ought to be enough for any forum!
    3. Re:SQL Server by delus10n0 · · Score: 2, Funny

      Awesome! I have no idea why someone modded me "Overrated", but thanks man. I appreciate it. My post certainly was that!

      --
      Not All Who Wander Are Lost
  13. Oracle by denubis · · Score: 1

    If you're a bank, you need to be running a DB that supports transactions. (PostgreSQL/Oracle come to mind). Anything else is taking unnecessary risks with your customers' data. Oracle, while very large, is an incredibly powerful, expensive, and frankly, worthwhile proposition. There are plenty of tools out there to convert your access databases (I wonder if they're even normalized?) to Oracle, and you can use J2EE or Forms, or your dev language of choice to make frontends for all your now happy users.

    (Does it show I attended an oracle workshop this morning? Nope? Shucks... )

    1. Re:Oracle by greenhide · · Score: 4, Insightful

      Actually, Access *does* support transactions. I'm not sure how well it does it on the client level, but I know for a fact that it does through the ODBC interface, because I've used it that way very successfully in the past.

      I do want to comment, a little, on the huge number of people who have bad-mouthed Access in this thread.

      I am not a lover of Microsoft, and we are moving our entire office over to Linux/OS, blah blah blah.

      HOWEVER, I am currently moving sites over to using Postgres (yes, MySQL *is* faster, but that's because you can't do as much with it). One thing I've noticed--it is much, much slower than Microsoft Acccess over ODBC. Now, it's possible that if I was to do load testing, it would beat MS Access handily (in fact, I've tested this and it's true). However, for your run-of-the mill complex select query, MS Access handily outperforms Postgres on speed, with equally complex queries.

      Everyone consistently says how using MS Access is inherently worse than using a database server. I'm sure, in cases of heavy load, it is. But if you have only 50 users accessing a database (and it's doubtful that they would all access the same database at the same time), Access will actually respond fairly well.

      I'd like to add that when I was working on porting a website from using Access to using MS SQL Server, I noticed an instant drop in speed and response. We don't host that site, so I don't know what the setup is for their SQL Server machine, but queries took often 2-10x as long to execute. We switched over to avoid problems that came up a few times during the month when too many people were accessing the database. Now I get server disconnect errors all the time--a few times per week.

      So for all those who've suggested switching to SQL Server as a more stable solution--<Bronx cheer>.

      Oh, and also:

      I wonder if they're even normalized?

      This is, sorry, an arrogant and stupid assumption. The quality of data organization is dependent entirely on the designer of the database, *not* on the type of database used. It is just as easy to make a crappy flat database in Oracle as it is in Access.

      --
      Karma: Chevy Kavalierma.
    2. Re:Oracle by zulux · · Score: 1


      Screw arounf with the PostgreSQL buffers in your config file - PostgreSQL won't allocate enough memory to do decent caching, so out of the box, it's performance sucks.

      Get those buffers set right, and PostgreSQL will come very close to Access' speed.

      --

      Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

    3. Re:Oracle by adri · · Score: 1

      .. and turn on query logging, do some explain/analyze select stuff and add indexes.

  14. Making Access databases multi-user by nebbian · · Score: 3, Informative

    Hey, not sure if this is your problem, it probably isn't but try Tools->Options->Advanced->Default_Open_Mode->Share d. Works for me in an environment with ten or so people all using the one database at once.

    That's assuming you are tied into an Access system, although I've found MS Access to be more reliable as a database than MS SQL. For example, in MS SQL you can retrieve a date record and it will be in Australian date format, put exactly the same data back into the database and it will be treated as US date format. Also this bug really shits me.

    If your IT department is as anal retentive about MS as mine is, then you can't just use a real database like mySQL so unfortunately it looks like you're stuck with Access. But I don't find it all that bad, in fact I prefer using Access databases with a web frontend to any other system because you can treat the database as a file (unlike mySQL, MSSQL, oracle etc).

    1. Re:Making Access databases multi-user by Anonymous Coward · · Score: 0

      A file that grows ever larger, sure. ;-) For some reason, DELETE statements issued via ODBC/ADO (at least in my experience) don't actually delete the data out of the file, so it doesn't ever get smaller. Anyway, access is not the only system that uses the Everything In The File concept, see also Interbase/Firebird for another example.

    2. Re:Making Access databases multi-user by schotty · · Score: 1
      Hey, not sure if this is your problem, it probably isn't but try Tools->Options->Advanced->Default_Open_Mode->Share d. Works for me in an environment with ten or so people all using the one database at once.
      Mod this guy up -- he recalled what I did not. And it is MOST accurate. Read my above post for more info.
      --
      Sigs are nice guns ...
    3. Re:Making Access databases multi-user by fooguy · · Score: 2, Informative

      That's assuming you are tied into an Access system, although I've found MS Access to be more reliable as a database than MS SQL. For example, in MS SQL you can retrieve a date record and it will be in Australian date format, put exactly the same data back into the database and it will be treated as US date format. Also this bug [microsoft.com] really shits me.

      Pardon me for being so insensitive, but you sir are an idiot.

      Access is more stable that SQL Server? Access is a desktop database, and maybe you've noticed when it fires up it consumes 99% of your CPU time? It has very primitive support for RI and views, and forget about triggers or transactions.

      Also, you should never use identities, they force bad habits are aren't good in a replicated environment. Always use GUIDs for your key values. That takes care of your bug.

      If you're going to recommend they go with an OS DB, at least suggest postgres since it supports MVCC.

      Also, someone suggested using OPLOCK, don't. It makes things faster, but if you get annoyed by escalating table locks, you'll be really pissed at your OS locking the whole database on your first write. I used to write login scripts to push reg keys to disable OPLOCK for that very reason.

      An earlier poster had it down: split the data and the code (which is easy with Access 2000 and XP), move the data in SQL Server, continue to use Access as the front end, and be done with it. If you want to add additional security, look at using a custom .MDW file.

      --
      "All I ever wanted was to see Larry Wall give Bill Gates a Perl necklace."
      http://www.eisenschmidt.org/jweisen
    4. Re:Making Access databases multi-user by nebbian · · Score: 1

      Pardon me for being so insensitive, but you sir are an idiot.

      That's pretty funny coming from someone who is so lonely the only way he can get a woman is to program his own.

      Geez man, lighten up!

    5. Re:Making Access databases multi-user by aoteoroa · · Score: 1
      I prefer using Access databases with a web frontend to any other system because you can treat the database as a file (unlike mySQL, MSSQL, oracle etc).
      I agree. I have always liked how Access stores all its data in a single file. Interbase works in a similar way. All the data is stored in a single .gdb file which I can build on a windows machine and upload to a linux server.

      Of course Interbase, unlike Access, is just a database server and does not have any front end tools. However there are apis for C, C++, PHP, ODBC, and JDBC so there are plenty of options for writiing your own front end. Interbase, like Access, is super easy to install. On windows you just follow the install wizard, and on Linux just untar the package and run the install script.

    6. Re:Making Access databases multi-user by fooguy · · Score: 1

      That's pretty funny coming from someone who is so lonely the only way he can get a woman is to program his own [eisenschmidt.org].

      That doesn't make me an idiot, that makes me a genius. It frees me up from things like dinner and hanging out with her friends to troll message boards and bitch about other people.

      --
      "All I ever wanted was to see Larry Wall give Bill Gates a Perl necklace."
      http://www.eisenschmidt.org/jweisen
  15. A few more suggestions... by maunleon · · Score: 2, Informative

    Of course, the best solution is to step up to a real database. Failing that, you could try some of the following ideas:

    If the database is small, you could have multiple copies of it, and sync the changes later. If it's really small, you could automatically make a copy for each user.

    You could have a broker program (a middle tier) that is the only one which accesses the database. The clients would talk to the broker, not the database. This could be done easily with any of the middle tier technologies.

    You could cache data to the client and reduce the number of accesses to the database.

    There is not enough information in the original post. If your database is large or if your changes are time critical (e.g. users must see changes in real-time) then your only option is to upsize.

    1. Re:A few more suggestions... by maunleon · · Score: 1

      One other approach I forgot to mention, and it's about the same idea as the middle tier. Create a web service, have the web service query the database, and have your clients query through the web service.

  16. Pedantic correction... by leonbrooks · · Score: 3, Interesting
    It's not made for multi-user access

    Despite this, it can be made to run reasonably efficiently and reliably if you know how. I have a mate (Hi, Jeremy!) who does this regularly, and other things like rewrite the GDA (no shit, he did this) on his iPaq to not do stupidly pointless transforms, and to use integer arthmetic. The result is an eye-opening iPaq that displays maps in realtime instead of at plotter speeds.

    Nevertheless, for your average gonzo it's too much work. And Microsoft products are a dead end anyway. As practically everyone else is saying, whack up an ODBC interface and hide whatever you like behind it by way of a real database. If you can make it web-based, that's an additional layer of useful abstraction that allows to to hotswap even more technologies.

    No doubt I'll get a /. lameness filter message about too many syllables when I press this button... (-:

    --
    Got time? Spend some of it coding or testing
    1. Re:Pedantic correction... by awful · · Score: 1
      For a couple of years now I have been volunteering at a radio station during their annual subscriberthon. A room of volunteers answers phones and enters subscriber details into a database. The database is Access. The frontend runs off a ColdFusion server. I asked the IT guy why ColdFusion and he said "because we can have multiple users of the Access database, without anyone actually having to run it".

      So if you really want to keep Access, try ColdFusion.. Although it'd cost you far more for a ColdFusion licence than MySQL...

    2. Re:Pedantic correction... by leonbrooks · · Score: 1
      because we can have multiple users of the Access database, without anyone actually having to run it

      Either CF is doing the arbitration for MS Excess, or it's doing Excess's own job for it. Either way, very clever of CF, hats off to them...

      --
      Got time? Spend some of it coding or testing
  17. If price AND ease of migration matter... by WoTG · · Score: 2, Informative

    Like some previous posters have said, you are pushing the limits of an Access MDB.

    MS SQL-server is the obvious recommendation, mainly for "compatibility" reasons. In fact, I've counted several such recommendations already. It's a "real" database, and a reasonably easy upgrade path (depending on how the code was written...).

    That said, it's cheaper (i.e. probably free for your purposes) for you to use MSDE - which is really a limited version of the SQL Server engine. I think the only major limits are that the maximum db size 2GB, and the management tools are not included (you'll have to live without, or get a license to them some other way, such as getting a copy of Office Developer).

    Having said that, perhaps you really don't want to touch the code... there are many ways to optimize an Access MDB. I don't think anyone has suggested making sure Samba isn't causing a bottleneck -- I recall reading about updates or settings that dramatically affected filesystem databases like Access MDBs.

    1. Re:If price AND ease of migration matter... by ickle_matt · · Score: 3, Insightful

      MSE is optimised for up to 5 concurrent connections, after that it starts slowing down *a lot*.

      Having said that, if you manage your connections properly in the front end you shouldn't have too many problems and it /is/ free...

    2. Re:If price AND ease of migration matter... by sxpert · · Score: 1

      no, it's not "optimised" for 5 concurrent connections. It counts the connections, and when there are more than 5, it slows down on purpose with hints in the system log that you should upgrade to MSSQL server...

    3. Re:If price AND ease of migration matter... by wrero · · Score: 2, Insightful

      Word of caution:

      If you use MSDE, please be sure to set an "sa" password. And don't forget to install SQL Server patches....

      It has been my experience (with thousands of customers using MSDE) that it is generally maintained poorly - when there is no UI, people tend to forget about it. I'd guess that the propagation of the recent SQL Server worms were due, in good part, to MSDE.

      Other than that, it's a good way to go.

  18. Solutions by skinfitz · · Score: 1

    Anyone have any other ideas on how you would have gone about sharing these MS-Access databases?

    The easy way to share access databases (if you really HAVE to use access - I'd strongly recommend a proper database server such as MySQL or if you can afford the licenses, MSSQL) is to share the database via ODBC. Bear in mind that when sharing Access in this fashion, the MS JET DB engine has a nasty habit of corrupting the database once you hit so many simultaneous users.

  19. Only one reply by Eivind · · Score: 2, Informative
    There's only one sensible reply to this question:Don't do that!.

    Trying to use Access for 50 databases with a multitude of concurrent users the world over is simply the wrong tool for the job.

    Get a proper database and your problems will solve themselves.

  20. Get rid of Access - partially by Tux2000 · · Score: 2, Interesting

    Get rid of Access as a database server. It is ok to use Access as a frontend to almost any "real" database server. If you have a samba server, you may want to put a PostgreSQL or MySQL server on that machine. Install ODBC sources for the server on the clients, and connect Access through ODBC to the server. In Access, separate program code and database, delete the database part, and distribute the *.mdb "Program" via the samba server. Your users can still use the user interface they are used to, but there will be no more file sharing conflicts.

    --
    Denken hilft.
  21. corruption by fabianE · · Score: 1

    If you use your access-db in a network you can also get a corrupted db. Although this can be solved by simply opening the db on the local computer => access-db is not designed for network use.

  22. Porting Access97 data to PostgreSQL by Futurepower(R) · · Score: 2, Informative
  23. I haven't seen this suggested... by FroMan · · Score: 2, Interesting

    Create a website to access the Access databases through. Use ODBC/JDBC connections to the DB instead of using local Access forms and reports. Beyond that you can also setup any database behind the scenes with it.

    The company I work for deals with CU's for archival. Since I've been here we've used Access and MSSQL as our back end and IIS/asp/msjava combination. We are moving from that to a database independent and real java/servlet environment.

    One thing to remember is that if you create a website to access the database data through you will need to fork out real money to either a developer to build the site and maintain it, or assign that as someone's job. Over all it is a good idea since you then can be on any type of machine and access/update the data instead of a machine that requires Access on it.

    --
    Norris/Palin 2012
    Fact: We deserve leaders who can kick your ass and field dress your carcass.
  24. I haven't seen it yet by Samus · · Score: 1

    I haven't seen it mentioned here yet but it could be issues with samba. I don't think samba supports the granularity of locks on a network file that NT does. In a file based DB being able to lock just portions of the file for updates is crucial. I've seen places where people did some pretty sick things with Access so I know its possible to have 50 people use an MDB at the same time. If all 50 are doing updates though Access will pretty quickly shit itself and corrupt the db. It really isn't meant for more than 5 users simultaneously updating. And as others have said seperating the presentation from the data into different MDBs is also a must.
    Also as another idea you could look into using terminal services and host the databases on that machine. Your bandwidth with probably be much better utilized. I would probably only go that route if a real RDBMS wasn't feasible.

    --
    In Republican America phones tap you.
  25. Which bank? by seanmeister · · Score: 5, Funny

    Seriously, I want to know. Because if it's MY bank, our relationship is over.

    I mean, Access - come ON!

  26. SQL---REPEAT--SQL + Web by haplo21112 · · Score: 1

    Access is never the correct solution in the enterprise. Put the data in sql and design a web front end to access, update, and delet data...

    --
    Power Corrupts,Absolute Power Corrupts Absolutely, leaving one person(group)in charge is absolutely corrupt.
  27. SQL Server instead of Oracle by Anonymous Coward · · Score: 0, Redundant

    I will differ, and heartily suggest SQL Server 2000 instead. This is because:

    1. Microsoft provides an excellent upgrade path from Access to SQL Server, using Wizards to automate many of the "tedious details". You should be able to split your front-end forms / code from backend data, and move your backend data from Access to SQL Server with minimal coding.

    2. A SQL Server installation, IMHO, is much easier to install, setup, and maintain. This will be especially true for your situation, where you have a lot of small to moderate sized databases to maintain on what will probably be 1 - 2 Server boxes.

    3. You are likely to spend a lot less to buy SQL Server. Microsoft's SQL Server license for SQL Server has tended to be cheaper than Oracle. Also, you can use a PC "commodity" server with Windows 2000 / 2003, instead of the high-end "*NIX" boxes the Oracle people usually push on their customers.

  28. SAMBA: oplocks = no? by cymen · · Score: 1

    Have you tried debugging the problem from the Samba side? There are a number of helpful configuration documents and mailing lists.

    In one of the installations of Samba, as a replacement to Novell, I ran into a file locking/corruption problem. The problematic application was an ancient DOS scheduling program with multiple users. The solution turned out to be:

    [DOS_SHARE_NAME]
    oplocks = no

    There are a couple of other options for file locking but that was the one that fixed our problem.

    Other locking options:

    strict locking = yes
    kernel oplocks = no
    level2 oplocks = no

    the handy groups.google search
    smb.conf man page
    The Unofficial Samba HOWTO

  29. Access as an ... by JSCarr · · Score: 3, Informative

    ...enterprise application? A number of people have already mentioned that Access is unsuitable for that, so I'll just add my voice in agreement and move on.

    A couple of options that I see, particularly if you're primarily an MS house and/or don't want to rewrite your front end:

    1) Get the backend into something else, like MS SQL Server. You can keep your forms and reports virtually unchanged. If you go that route, I recommend this book highly: Microsoft Access Developer's Guide to SQL Server

    2) Post your question over here: comp.databases.ms-access. There are a lot of professionals in that newsgroup who are generally more than happy to tackle questions like this and have a tremendous amount of experience and expertise behind them.

  30. get a clue people. by Anonymous Coward · · Score: 0

    Its obvious many of you don't work in a corporate environment, if you did, I wouldn't be reading many of the comments I am. "youre using access? why you shouldnt trust your customer information to that!" please, he didnt SAY what they were using it for. In a corporate setting, there are many uses for access, that can be done quickly, cheaply, and without IT intervention. Many times these are things that scratch a particular itch for a person, that others find useful, but dont have the backing necessary or the ROI to merit a serious development effort. there are simply too many other things that take precedence over them.
    these are usually small things like request tracking, departmental knowledgebases, individual or departmental timetracking utilities, etc. they aren't used for serious things and never for critical customer information. get a brain.

    1. Re:get a clue people. by il_diablo · · Score: 1

      You are absolutely right, AC, in theory. For a small one department deal, Access applications are the "itch scratchers" so the employees/management doesn't have to go to IS and have a full blown implementation done. Of course, the fact that any "Joe/Jane Accountant (or whatever)" can do this leads to so many woes with database programming standards. But that's anothe topic.

      "we have a bunch of MS-Access databases(>50) which are being used by around 50 users around the globe on a daily basis"

      This seems to indicate that it's a bit more than a "one-off" solution for a few people. Combined with the fact that they have to host the "applications" on an enterprise wide SAMBA directory, and IS is ALREADY involved in managing the synchronization issues, it seems that this really isn't the minor issue you talk about.

      --
      Quidquid latine dictum sit, altum sonatur.
  31. SAMBA SHARE?! by Anonymous Coward · · Score: 0

    NEVER, EVER put databases on a network share. EVER.

    I don't know of a single company that would recommend this -- in fact, Sybase (the company I'm most familiar with) goes to great lengths to say what I've just said.

    Simply put: recovery cannot be guaranteed over network-shared databases in the event of a system failure. (Not to mention any performance decrease....)

    The correct way to handle this situation is to install a DBMS with a client-server architecture (I have no clue if Access can do this), and have the individual users LOG IN to the database instead of sharing it via Samba.

    For the sake of your banks' data, man, get reading (and working) on this!!!

  32. Dont Share MDB files!! by nurb432 · · Score: 1

    Put the tables on a real server, be it free ( postgres, mysql, what ever ) or MSDE ( you get a distributable runtime if you own VB.. )

    You can still use Access for your GUI and queries and reports if you cant move them to something else.

    But what ever you use for the interface don't distribute raw MDB files for the data.. you are asking for problems. I don't care what Microsoft says, 'jet' is just a bad idea all around. Plus you get better performance as a side effect.

    --
    ---- Booth was a patriot ----
  33. MS-Access to PostgreSQL Backend Gotcha's by Whatchamacallit · · Score: 1

    FYI,

    Access will attempt to optimize your queries and literally mangles them. Do so googling searches to find the registry key to turn this query optimization off by default.

    I remember reading an article about a company that used an Access front end to a PostgreSQL backend and they had to turn on debugging on the PostgreSQL server to see what the submitted queries were. Access was optimizing their already optimized queries and literally making them not optimized in the process. ;-)

    This sort of frontend to backend via Access Links and ODBC connections is very very common in the industry. Of course, there will always be some work on an IT staff member to set it up and get it working. i.e. the Access front end needs to be installed and configured properly and the MDB needs to be distributed, etc. But it's very do-able. You can use just about any backend database you like. i.e. Oracle, IBM UDB/DB2, Sybase, PostgreSQL, MS-SQL, MySQL, Interbase, etc.

  34. Commercial Solution by sidespace · · Score: 1

    We make a product that puts a TCP/IP wrapper around Microsoft Access databases. This wrapper means you can seamlessly query these databases remotely from either Windows or Linux without having to worry about sharing violations.

    Our product name is UniverSQL and I would be more than happy to send you a demo if you email me. We provide full technical support and GUI admin and query tools that run on both Windows and Linux.

    Regards,

    Tyler

  35. RUN by sohp · · Score: 2, Funny

    Please tell me what bank you are working at so I can be sure I never put my money in an account there.

  36. I'm tempted to call you an idiot, but I'll refrain by delus10n0 · · Score: 2, Insightful

    Ok ok. Let's back up here.

    First, hopefully you're using just the "client" version of Access, which doesn't allow editing of forms/reports/etc., just viewing and executing.

    Second, you shouldn't be having your users all access the files at the same time on the same share. It's just asking for trouble (especially since I don't know how compatable a Samba share is with Access's sharing methods.) You'd be better off keeping a local copy on each client's computer. You could do this using a logon script, or if you're savvy enough, could even code it inside your Access application itself (on startup, check it's own version against the one on the server, if not up to date, warn the user, etc.)

    A common mistake that people make when working with Access is to try to use it as anything more than a "front end". Sure, it might be 'easy' to code in, but it's pretty damn sloppy and inefficient. You're better off making nice looking forms which call pass through (re: stored procedures) queries on the server, which in turn handle the logic and data processing for you. (You are using Oracle or MSSQL, right? God I hope you're not using Access's tables to store data..) Linked tables are the _worst_ way to do things.

    Also, as many others have said on here, you're better off translating your Access database into a web interface...

    --
    Not All Who Wander Are Lost
  37. No. by KnightStalker · · Score: 1

    You *WILL* get a corrupted DB. Just a matter of time.

    --
    * And remember, it's spelled N-e-t-s-c-a-p-e, but it's pronounced "Mozilla."
  38. You're Doing It Wrong! by yancey · · Score: 2, Interesting


    I've seen a few posts saying that Access isn't designed for multi-user databases. It would be more acccurate to say it is not optimized for that function, but is fully capable of it.

    You must carefully construct the Access database specifically for shared access; it doesn't do that by default. If your average user created the database, then it is NOT configured for multi-user access.

    I created a small Access database that is used by around 40-50 people and the MDB file is shared from a NetWare server for security. You have to setup an Access "workgroup" and "join" that workgroup from each machine and have people login to the database. It does allow for some access control and does do record-level locking.

    In short, I think you're having data access conflicts because your databases are not configured for multi-user access.

    --
    Ouch! The truth hurts!
  39. A dollar short and day fscking late. by Glonoinha · · Score: 1

    Damn. I read this and thought ... I have just the solution - use a real SQL database back end and use your Access forms to connect to that database via ODBC ... surely NOBODY would have thought of that.

    I'll be a hero!

    Me and every other mouth breathing, knuckle dragging, SQL using and ODBC connecting code monkey on /. I think even the First Post guys said 'umm FP - and use SQL via ODBC'

    --
    Glonoinha the MebiByte Slayer
  40. Switch something by stanmann · · Score: 1

    I've used Access over shares as a front end, and as a back end. And as others have said in their various ways, replace Either the front end or the back end. DON'T use Access for both. Whipping out a custom VB or web frontend to an existing database using standard automated tools is practically seamless, and with "ONLY" 50 users you can get away with leaving Access as the backside. You could also go with switching the actual data to any of the previously recommended Backends(MySQL, MSSQL,Oracle, etc) and leave the code/frontend in Access. That of course will require you deal with the mess that is Access and ODBC. So ultimately plan to replace both, but schedule one to replace first and phase into replacing both.

    --
    Food not Bombs is a nice platitude but it breaks down when you notice that the Bombees are usually well fed
  41. Been there, done that, still doing it... by cr0sh · · Score: 1
    The company I currently work for has an in-house CRM system, the backend is currently an Access 97 DB, and the frontend is a custom written VB6 application. We have probably around 25-35 users on it at any one time.

    For a long time, we were having corruption issues, and didn't know what the reason was - it got so bad, that I ended up writing a patch to custom sync records on tables with a backup - that is, if a user changed a record, it would be saved prior to the change, then saved after - if any corruption happened, the system would sense this, flag the record, and pull the old record from the backup table. This worked fairly good (it was randomized and distributed across the running instances of the app, so it would only "bog down" one person at a time), but it was far from ideal - and when the backup table became corrupted...

    Eventually, our sysadmin of the NT server we were hosting the Access DB file on figured out the problem - it turned out that there is a file locking flag setting (I cannot tell you the exact name of the switch - I appologize), that when it was off (or on?) would cause these corruption issues. When we flipped it, the problem went away completely.

    Of course, this doesn't answer your question - but it does answer the question of whether corruption is truely an issue with a multi-user Access DB. For your question, I think I would handle it in the following manner:

    First off, you would want to consolidate the tables of the DB's involved. 50 separate DB's seem like way too many - I can understand if some are set up for one department, and others for another - if that is the case, group the tables together in that manner, and get the DBs organized. Next, you will want to set up indexed primary key fields on those tables that have similar keys (or same keys) - for selection performance and SQL JOIN reasons. You will then want to make some kind of front-end (or modify the one you already have - which it doesn't sound like you have one, or if you do - it is an Access front -end).

    The thing you have to realize about Access (speaking of 97 here - not sure about recent versions) - is that it expects to be "local" to the client - that is, it is opened like a file, and not in a "client-server" true-ODBC fashion. From what I understand, what the JET engine does when you access it via ODBC is the same as if you were accessing it as a file under DAO - just one small level of redirection - it isn't possible to use ODBC on the database otherwise. If you want real ODBC functionality, then I suggest you convert your database(s) over to PostgreSQL or something, then set up a client based DSN-less connection using a VB or Java front-end (or, if you don't want the pain of maintaining multiple client installs, set up Perl, PHP, or Java servlet system to query and display results from the DB - look into LAMP systems as well, if you want to really do some fun stuff).

    In theory, you could code a service type application in VB that could talk via TCP/IP to clients, passing SQL queries, and it would use that against the Access DB, then return back a recordset (maybe with requests and responses in XML format) - you would have to do some kind of session management, so you know who requested what, and when - managing queues of requests and responses. Not sure how well it would work, though...

    Ideally, your best bet is to get away from Access, and on to something better - then build front-ends to the data that limit what the users can do to the data (also, build in an audit table with functions to update it - pass the function say a key value, a type, a new value, and an old value - the audit table would store this information, along with a timestamp and user name - so you know who changed what when, and they can't lie about it if they bork the database). Finally, set up a system to back up those DBs if you don't already do it (I would hope you do).

    --
    Reason is the Path to God - Anon
  42. Webify? by acaird · · Score: 2, Informative

    You could try to webify it. Lots of things talk to Access over the web; even from a Unix web server. Look at ODCBSocketServer+Perl for doing it from Unix; ASP, ColdFusion, WinPerl, etc. for doing it from Windows.

    Of course, everyone else is right, you really, really shouldn't use Access for anything. At all. Ever.

    Best of luck.
    --
    Power corrupts. PowerPoint corrupts absolutely. E. Tufte
  43. Now You're talking my cup of soup!! Let's do it! by boy_afraid · · Score: 4, Informative

    Okay, first thing first. This is running off of SAMBA. You need to upgrade these MDBs to SQL Server (standard). Don't argue, just do it. If your boss doesn't agree just point him to this slashdot posting and he'll get it.

    Next, you have to convert the Access file to an ADP (Access Data Project). When you create an ADP you can tell it to what database to connect to. This is GREAT when calling the 'connection' property, because now you don't have to create a connection to the SQL Server database each and everytime you want to do something. You just do this:

    Dim ADOrst as New ADODB.Recordset
    ADOrst.Open "sql statement", CurrentProject.Connection

    THAT'S IT! The biggest headache will be to convert DAO to ADO. It's worth it. Take a look at this link: http://www.msofficemag.net/features/2000/01/vba200 001sf_f/vba200001sf_f.asp. It will help. There are other sites, use Google, that will show you how you can use your DAO connection code and make it look like ADO, so it gives you time to actually do the manual recoding will keeping your users happy and connected. This is a short-term band-aid. You are still going to have to re-code to ADO, but is not that difficult.

    **BENEFITS OF ADP**: You will have the power to accesss views, stored procedures, tables, as if they were local. I was a bit scared when I couldn't use my queries in access, but I converted them to either views, but 85% of them were converted into stored procedures. They are a lot better, because know I just setup my stored procedures to accept variables, sql server does the grunt work for data crunching, and then my recordsets were returned back very quickly. Here is an example:

    dim rst as new ADODB.recordset
    rst.open "exec proc_stored_procedure_name " & variable1, CurrentProject.Connection
    If Not rst.BOF And Not rst.EOF Then
    rst.MoveFirst
    Do While rst.EOF = False
    {do something with the records}
    Loop
    End If

    You can use your stored procedures over and over again for different parts of the program without having to recreate the wheel everytime. I know you probably use queries or tables as lookup sources for drop-down boxes. Create a View or Stored Procedure and then set the controls "Row Source" property to the view or stored procedure. To do it programatically do this:

    cntrlDropDown.RowSource "proc_storedproc_or_view"

    That's it. You can also pass variables to the stored procedure and return the recordset to your control. In access I had a seperate query for each drop down box for hierarchy data, now I just have one stored procedure and pass it a variable to tell it what listing on the heirarchy I need.

    One major benefit of stored procedures is that they are cached and optimized on SQL Server without having the database having to optimize it every time it runs. It keeps the plan already and saves time there.

    Next, convert DAO to ADO. If you have something like this for DAO:

    Dim db As DAO.Database
    Dim rst as recordset
    Set db = CurrentDb()
    Set rst = db.OpenRecordset("sql statement")

    Then you should change it to this:

    Dim rst As ADODB.RecordSet
    rst.Open "sql statement", CurrentProject.Connection

    If you also have a recordset object, you just need to modify it like above. You can do away with the database object if you use the CurrentProject object. You no longer have to close the database object either since it was never created, but you still need to close the recordset object and set it to nothing, like so:

    rst.close
    Set rst = Nothing

    Everything should still work fine. One more note about using ADO. If you use the AbsolutePosition property, in DAO the value starts with 0 for the first record, in ADO it start with 1 for the first record. I have to learn that the hard way.

    I know ADPs are fairly new,

  44. Porting Rules from Access to MySQL by jpkazarian · · Score: 3, Informative

    A number of others have mentioned porting the back end from Access's built in JET database using file sharing semantics to another SQL database. MySQL has been mentioned, and the combination of an Access front end with MySQL servering tables via ODBC is a much more reliable, especially with multiple users.

    It is possible to write Visual Basic for Access code that opens a database, looks at the tables, and generates SQL DDL and DML statements. Having done this, here is a list of gotcha's, or Things discovered as life goes on...

    SQL Naming and Other Standards Checks
    Check all tables against the following list while in Design view:

    1. SQL names may not contain spaces. Access names may.

    2. Access allows the use of some SQL reserved words, like INDEX, for table and column names. SQL obviously does not. These names must be changed to an SQL identifier (not a reserved word).

    3. Set the Required property to Yes for all primary key columns.

    4. Set the Indexed property to No for all columns that are members of a multi-column primary key.

    More details on these and other topics are presented below.

    Fields vs. Indexes
    The Jet database engine splits fields and indexes into two separate hierarchies. One cannot tell when inspecting fields if they are part of an index or not. Instead one must navigate from the field level back up to the table level and then down to the index level.

    Primary Keys and NULL Values
    Access does not mandate table primary key columns to be NOT NULL. One can use a column in a primary key even if the Required property is No. What Access does instead is disallow NULL values in the corresponding index. So during data entry, an INSERT or UPDATE with a NULL primary key is rejected by the DAO at index update time, which precedes column update time.

    MySQL will not allow this. It (and other database servers) mandate that no part of the PRIMARY KEY may contain a NULL value. In Preview, verify NOT NULL is specified for all columns in the CREATE TABLE statement when a subsequent ALTER TABLE ADD PRIMARY KEY statement is generated.

    Primary Key Indexes
    Access automatically generates an index for each column in a multi-column primary key. If indexing is also specified for such a column in the table design form, Access generates two different indexes on the same column.

    To eliminate redundant indexes, do not index a column that belongs to a mult-column primary key.

    Autonumber Data Type Support
    Access does not allow setting the required property on an autonumber field. Set NOT NULL in an SQL DDL statement when both of the following conditions are true:

    1. The column has the dbAutoIncrField attribute.
    2. The primary key contains exactly just this column.

    Access allows autonumber fields that are NOT keys. MySQL does not.

    --Jason Kazarian
    access2mysql@leftbrainedgeeks.com

  45. Try this by djupedal · · Score: 1

    First, I agree to move to something else, but I won't say my preference here. Some wank will find a way to blame my choice on my family tree, and sidetrack the discussion into the gutter.

    That said, if you insist on using MDB's, hook to them with a front end...check out Cold Fusion, formerly from Allaire, now in Macromedia's hands.

    You shouldn't allow anyone but your DB Admin to tap directly into your Access files. Building an interactive, browser based front-end is not that hard, and it provides many of things you are either looking for now, or will be seeking in the future. I worked for a bank, and found them pushing MS solutions. While we pushed something mo' betta, we also worked to get the data they already had into the hands of the users, via MS Access and CF.

    Ton's of examples out there...get started now, and relax sooner than later.

    1. Re:Try this by boy_afraid · · Score: 1

      I agree on webifying this with ColdFusion (I'm an expert with 8 years of CF experience under my belt), but it look like this guy is trying to get performance working better with the least amount of impact/work. On a previous post I have step by step directions to upgrade the data backend to SQL Server and then convert the front end to an ADP file and hooking it into SQL Server. CF would be excellent, but think of the time needed to re-create every form and business rule.

  46. agree by djupedal · · Score: 1

    Makes good sense. Assuming he can move to SQL easily. I know I did. I wonder what kind of table structure his 50 db's represent.

    Like I said, I have my own preferences these days...none of which currently include MDB's. I think I only have one legacy Access base still working, and it's 3 hears old.

    Not knowing his skills, budget, resources and goals in detail, it's hard to recommend beyond examples, etc.

  47. shared Access database possible! by Anonymous Coward · · Score: 0

    just change the name of the mdb file to .mde (e.g. finance.mde), and it will manage locks etc. better. Our shop did this as a temporary solution while moving to a real RDBMS and it worked for 30 users.

  48. Advantages of DAO over ADO by Huusker · · Score: 1

    In new Access database projects I still prefer to use Data Access Objects (DAO) even though it is an 'older' technology.

    Here is why I generally dislike Active Data Objects (ADO):

    1. ODBC(DAO) is well understood technology in the free software community. The internals of OLEDB(ADO) are inadequately documented in comparison.

    2. DAO(ODBC) is more portable; making it easier to swap out the back end database. With ADO you must always use the database vendor's proprietary SQL dialect.

    3. ADO views on joined tables are generally not updatable, whereas DAO-ODBC-SQL2K views generally are. (This is based on my experience with SQL Server 2000.)

    4. DAO is very good at spanning queries across multiple databases. It breaks up the SQL and sends sub-queries to each data source.

    5. ADO has crappy recovery semantics for failed UPDATEs. You have to explicitly test every update and call CancelUpdate on failure, otherwise partial updates are implicitly committed (yuk).

    6. DAO allows you to embed Visual Basic functions and expressions into the SQL. Useful for layout and presentation.

    7. DAO has PIVOT TRANFORMs, which are essential for 2D data (e.g. complex graphs, charts, and calendars). JET will translate to standard SQL and forward to ODBC-SQL2K. Otherwise you have to buy the hugely expensive SQL Server Enterprise Edition and install the Analysis Option to get equivalent capability.

    The main disadvantage is that DAO incurs a slight performance hit for the SQL pre-processing step. It adds perhaps a couple milliseconds to start of the query. For performance-critical queries you can always write a pass-thru SQL query or use ODBCDirect. (ADO can be thought of as simply 100% pass-thru queries.)

  49. Speaking from experience, by by2 · · Score: 1

    it can be done. The key is to make sure your applications are opening the databases and recordsets in the proper share/locking mode, minimize the amount of time lock is in place, minimize the amount of time recordsets are open, and handle the runtime errors correctly. Multiple users should be able to have read access to same database simultaneous, and still be able to update the database but at the same time. First make sure all your network shares are setup properly for this, and you probably have a big enough user base to justify moving to a true client-server based database. But don't listen to those who tell you to stop using Access just because it's not a "real" database system.

  50. No need for ODBC by oliverthered · · Score: 1

    you can use this little library to get direct platform-indepentant access for all you access data.

    --
    thank God the internet isn't a human right.
  51. ODBC Router by Anonymous Coward · · Score: 0
    The ODBC Router will allow your SQL database to support more concurrent users than you can with drive-mapping (file-sharing):
    • Drag the .MDB file onto an NT/2K/XP box and use the ODBC Control Panel to Add a System DSN using the Access ODBC driver.
    • Test out the new System DSN (in Excel, etc..)
    • Download and install ODBC Router onto the NT/2K/XP box.

    Now, on the client PCs, Macs or Linux boxen...
    • Download and install an ODBC Router Desktop Client
    • Add a UserDSN (in the ODBC Control Panel) that uses the OverDRIVER to point to the network data source.

    That's it!

    The only real caveat is that MS-Access itself will refuse to open an MS-Access database via the MS-Access ODBC driver, so if you are actually using the front-end features of MS-Access, then you will need to start porting them to MS-Excel or REALbasicPro while you keep runing (with file-mapping the .MDB file) in parallel. (Note: If you are using MS-Access as a front-end, you may also want to consider simply importing your .MDB file into a SQLServer2000 database, but even this will require tweaking your MS-Access code in ways that would require a bank to do lots of re-testing --thus it's recommended to do a rolling conversion using ODBC Router, which will also enable painless switch-over of the back-end .MDB-file to SQLServer2000, ORACLE 9i or DB/2 when the front-ends are ready.)


  52. Posted on slashdot... by NNland · · Score: 1

    There's an article that was linked from slashdot describing how to convert access to sql here: http://developers.slashdot.org/developers/03/04/14 /1059254.shtml?tid=185&tid=156