The Design of Software (CLOSED)

A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.

The "Design of Software" discussion group has been merged with the main Joel on Software discussion group.

The archives will remain online indefinitely.

What database to use for Desktop Application

What database are people using for desktop applications these days?  Access?  MSDE? xBase???

We have always used xBase (i.e. dBase/Foxpro).  But this technically is more or less dead and we are looking at different alternatives.  Here are some conditions:

Must be low cost or free (<$20 per deployment).
Must work over a LAN (10mb network).
Easy to install
Easy to move data around (e.g. if we need to get a copy of the customer's database).


Monday, December 31, 2007
Firebird meets all of the criteria.

You could also look at Advantage Database Server (ADS). It optionally uses xBASE (Clipper/FoxPro) file formats, has a client server version as well as a free local client version, supports SQL for FoxPro and it's own proprietary DB format.

Both of the above are easily portable (Firebird is a single file per database, and you're familiar with xBASE). Firebird is open source, and a really simple installation. ADS isn't free (the server version, that is - the local client version is free) is a simple installation, too - you just launch the SETUP.EXE on the server you want to install it on.
Ken White Send private email
Monday, December 31, 2007
SQLite. period.
Monday, December 31, 2007
spoke too quick. the LAN requirement would mean extra work adding a server layer to SQLite.
Monday, December 31, 2007
I second the vote for Firebird.  In addition to what Ken White said, there is also the fact that there is a lot of enthusiastic support available for it and what I think may be the best Admin Tool anywhere (IBExpert).  I am still using the free version but the functionality is incredible.

One other thing that is very nice about Firebird (particularly if you use Delphi or some other language that can create a DLL) is that you can readily extend the SQL with your own functions.  This lets you do things that are hard to do any other way.

A full featured rdbms in less than 10 MB and you can run your application, the database and some admin tools (not, unfortunately IBExpert) off a flash drive with no access to the registry.

Sorry. I get carried away. I still can't believe how slick it is.
Jack Rodenhi Send private email
Monday, December 31, 2007
Also, checkout sqlite. Very small footpSrint.
Monday, December 31, 2007
I second sqlite. Solid as a rock, easy to use, fast, efficient, small, multi-platform. To steal from their home page, it is "self-contained, serverless, zero-configuration, transactional". It also has a full text search feature which is very, very nice.
Bryan Oakley Send private email
Monday, December 31, 2007
+1 for firebird....

There are 2 ways to use it...

Client/server ... install a server software on a pc/server and a simple dll on the clients

and standalone ... just replace the dll with the standalone one, and use the same program as before in "single-user" mode...
Totally Agreeing
Monday, December 31, 2007
Some of our current desktop applications use Access, but new development is moving to Microsoft's SQL CE. CE doesn't require our customers to "accept" another license agreement to install. The ones that use SQL express are more complicated technical tools that we suspect that most customers would want to connect to a full blown SQL server.
Peter Send private email
Monday, December 31, 2007
We had a small app running for a while using a desktop version of SqlServer (not sure which flavor; it might have come with FoxPro, or VS.) on an old desktop. It worked fine for the most part but there were a few rocky spots which went away when we moved the app to the real thing on a real server. I don't know if we were having hardware errors or software errors.

That particular app holds info which one wouldn't like to have stolen like names, addresses, ssns, bank account numbers. An Access database can simply be copied and hacked more easily than SqlServer, and our auditors would not permit it.

In this day and age with everyone concerned with ID theft, I wouldn't want to keep that info in a file system that basically kept it in the clear.
Nutmeg Programmer
Monday, December 31, 2007
sqlite, Mysql has an imbed version too.
Monday, December 31, 2007
Minor threadjack:  What DB driver are you Delphi guys using to connect to Firebird?  Are you using ADO?
Anonymous Hippopotamus
Monday, December 31, 2007
+1 for the Firebird / IbExpert combination. Totally awesome.
Tuesday, January 01, 2008
As the others have mentioned +1 to Firebird. Also what makes it attractive is that by simply replacing the dll (as already mentioned) you can either make the your application a stand alone one or a client-server one.

You can even have a dual mode wherein at startup the user selects whether to connect to a local database or a database on the network. You can also connect to both databases at the same time (for synchronisation purposes) all you need to do is to rename one of the fbclient.dll to something else. This is what I did with my time tracking app.
Phillip Flores Send private email
Tuesday, January 01, 2008
I'll fish :)

Why not consider an embedded object-oriented database like db4o?
Gili Send private email
Tuesday, January 01, 2008
I continue to maintain and develop an in-house app in Visual FoxPro.  The idea that software rots right away is silly.


Gene Wirchenko
Gene Wirchenko Send private email
Tuesday, January 01, 2008
For the actual storage of your data, Firebird is a great choice as several others have said. You can also keep using dBASE if you wish. It is no longer dominant, but it is not a dead programming language and its verious table formats remain common. See

You could also blend the two options. Use dBASE PLUS 2.6 as your programming language and it lets you keep using your legacy dBASE tables and also Firebird (or other) database servers. Thus you can have the convenience of the dBASE tables for exchanging data but the robustness of Firebird for primary storage.
Geoff Wass Send private email
Tuesday, January 01, 2008
Jet is mature, part of Windows, and for the most part its limitations are the same as any other DBMS based on an in-process engine.  The tools support as well as documentation and samples are impossible to beat.

Its biggest limitation is probably that it doesn't upsize to a server-based DBMS effortlessly.
Tuesday, January 01, 2008
+1 for Sqlite
Vkr Send private email
Wednesday, January 02, 2008
For Anonymous Hippopotamus:  I use DBExpress with the driver from CoreLab.  It's fast and easy and I think it will allow me to run my app off a flash drive.  I'm using it with a ClientDataset which allows me to do a lot of data manipulation in memory at maybe 100 times the speed I get from disk queries.

Contact me off line if you want to pursue this.
Jack Rodenhi Send private email
Wednesday, January 02, 2008
Question... You are talking a good bit about what Development software to use, but what database would you suggest? 
I am designing some database applications to be run on standalone for individual client computers.  I need to have the database or at least exe on their system and not on my computer.  All suggestions will be helpful.
I am a seasoned developer, but not in distribution for individual use.
Sherry Send private email
Wednesday, January 02, 2008

There have been several database products suggested above. Firebird was mentioned several times, and there were suggestions for SQLLite, MS SQL CE, mySQL, and db40. It was also pointed out FoxPro applications are still out and about (and thus using dBASE tables).
Geoff Wass Send private email
Thursday, January 03, 2008
Both Firebird and SqlLite are available as dlls or shared objects and can be linked to the main application.

I've used both. Firebird has most features you'd want from a database. Plus you can migrate to a server, if the need arises.

SqlLite is pretty limited functionality wise. But it is fast, reliable and runs anywhere - so if you consider taking your application to a mobile device, use SqlLite.
fat albert
Thursday, January 03, 2008
What do you see as the limitations of sqlite?
Random Joe
Thursday, January 03, 2008
Well, the list is here at

That FKs are not enforced is kind of a biggie for me.

Also, Firebird has a pretty nifty Stored Procedure language, which can easily be extended with your own dlls or shared objects.

I'm not so sure I would need all those things, since nowaydays I tend to keep my business logic out of the database. But it's good to be aware of those issues anyway.

For efficiency reasons, it's sometimes nice have a good stored procedure language available (hierachical queries for example).
fat albert
Thursday, January 03, 2008
I am curious, what GUI if any, or just the command prompt do you all use for creating your apps?
Sherry Send private email
Friday, January 04, 2008

Which language or GUI are you most comfortable using or need to use? If you use a database like Firebird, you have a number of languages you can use with their respective GUI development tools. As I mentioned, dBASE (the language and the GUI) works with Firebird. So do languages like Java, *.NET, PHP, C++, etc. and each of these languages has development tools like NetBeans, Eclipse, Visual Studio, Borland/CodeGear, etc.

For the Stored Procedures, Triggers and general management of the database like creating tables, granting rights, etc. IBExpert works great with Firebird. There is a free and a fee version. The free version actually does quite a lot. See
Geoff Wass Send private email
Saturday, January 05, 2008
Yeah, sqlite seems to be a good option.
I plan to use it in my next project as well
kevin Send private email
Sunday, January 06, 2008
Can sqlite be accessed from multiple threads? I know there is a write-up on the website, but it is still vague to me whether one can do this or not.

If you've ever used it in this type of scenario, please let me know how it went.
outback Send private email
Tuesday, January 08, 2008
Clarification: Can an sqlite database be accessed from multiple threads (either by opening new handles from each thread or passing a handle pointer to all the threads)?
outback Send private email
Tuesday, January 08, 2008
didn't see an answer to the last question about sqlite and threads, so ...

yes, sqlite can be accessed from various threads, applications, clients at the same time. what you cannot do is share the database handle between threads ... at least not without dipping into mutexes, etc to protect the handle.

so, each thread opens the file it needs and does what it wants, when it wants, and closes the file when done.

i can say that i've used sqlite extensively with small applications and have found it to work flawlessly (both v2.x and 3.x). i haven't written any large, multi-user lan apps with it, though (meaning > 10 users).

the fact that php5 includes sqlite with its standard package and google uses it with its gears project should say something about how stable it is;)

best regards,

Tuesday, January 22, 2008

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
Powered by FogBugz