FSDBMgr - Funduc Software Database Manager is a free Customer and Purchase Manager with data import,
search, email, and PDF invoice generation capabilities.
Background: Our Access database needed a revamp. Since
Microsoft decided to push SQL Server and its lite version instead of
Access, we started looking at alternatives. Our requirements were simple:
the data should be stored in few files (if possible, a single file like
Access); no requirement that a database engine be running at all times;
low cost; SQL queries should be available for extracting data as well as
database maintenance. SQLite is
one of the
most widely used database out there now and it met our requirements.
Administrator, a nice administrative tool, is available for laying
out a database schema and for running free-form queries on the data.
SQLite can be
http://www.sqlite.org/. If you use
the .Net interface (see below) it's included in that product.
Administrator can be obtained from
It's great for visually laying out a SQLite database schema and for
running free-form queries on the data.
So we decided to pursue this avenue and develop a utility for performing
our most frequent tasks as easily as possible.
ADO.NET 2.0/3.5 Provider for SQLite .Net interface was our choice because of the productivity and ease of use of the .Net
downloads and information.
For invoice generation in .pdf format we used another piece of excellent open source
code - Gios PDF .NET library
by Paolo Gios. The
PDF .NET library is available at
The license we release
FSDBMgr under is
GNU Lesser General Public License (LGPL).
Since our solution may benefit other small businesses, we decided to
open source it and provide it and the code for free on the Internet.
We do accept donations and can provide support and custom enhancements
for reasonable rates. To inquire, please write to
If you wish to submit fixes or enhancements, please contact us directly
for now at firstname.lastname@example.org. We will include them in new versions if they will benefit others
and will start a project on
SourceForge if the need becomes evident.
To build and work with the source code, the
environment can be used for free from
http://www.icsharpcode.net/OpenSource/SD/. The Microsoft Visual Studio is another option and there are others.
These were our requirements for the program.
We should mention that although we chose to use SQLite for our
database the program itself can be easily modified to work with any
database for which an ADO .Net provider is available.
Some tasks you can accomplish:
- Find a customer by Last Name: Enter the last name in the corresponding
field of the Find Customer dialog. If a reseller or customer has no
purchases yet, uncheck Show Purchases.
- Find a customer given last name, email or street address, order
number: Enter any portion of the information in the appropriate
field (one item at a time) surrounded by %% characters (wildcards in
SQL). If you enter multiple items, change the ANDs in the query to
ORs. If a reseller or customer has no purchases yet, uncheck Show
- Find a purchase by date, product and/or expiration date: Use the
Add Purchase button or menu and input the information.
- Find a purchase by customer info or purchase note: Follow the
Find Customer use case and check the Show Purchases box (on by
- Add a new customer: Use the Add Customer menu, button and input
- Add a purchase: Find the customer in the database (may need to
add them first), right-click the row in the query display and select
- Make a receipt or invoice: Follow the Find Purchase use cases
above, right-click one of the rows in the query display and select
- Add a frequently used custom query to the Queries menu: Save the query
in a text file in the Queries subdirectory with a .sql extension and
restart the program. The new query will show up on the menu.
- Keep track of Sales Tax information: Tax Information is stored in the
Purchases table. Very simple queries can be run and stored in the
Queries directory for this purpose. Please contact us at
email@example.com if you need more
info on this.
- Import purchase records from a file: Switch to the Import tab.
Select the columns in the file in the correct order by dragging and
dropping or using the buttons next to the column list. Enter the
correct delimiter. Then respond to the prompts for Adding Users or
adding Purchases to existing users.
Some of the useful functions and functionalities included in the
source code and sample compile (C# but can
be adapted to any .Net compatible language) include:
SplitQuoted(); /// Splits any string
using separators string.
/// This is different from the string.Split method
/// as we ignore delimiters inside double quotes
CapitalizeWords(); /// Capitalizes the words in the string passed in
Drag and Drop within a column list as well as from another list of
Use of the IAutoComplete COM interface from .Net to allow text
controls to remember a history of text entered during the program's
execution. See FSControlsLib.
Use of OUTER JOIN to show customers whether they made purchases or not
(for example resellers are not end customers and therefore will not get
Building a menu dynamically from the list of .sql files in the
Query subdirectory. This allows building a commonly used query
Creating a PDF document from database purchase records.
Reading ASCII files and properly translating them to Unicode
the user's code page.
Using MAPI to send email messages using Interop calls.
Using SMTP classes SMTPClient and MailMessage to send email
Performing Mail Merge on a block of text and substituting data from
the database for predefined (and configurable) tags. The tags can be
optional, so if not present the entire block can be omitted. For
"[$(Company)\r\n]" will only add the company name on a separate line
if one is found in the customer record.
Localizing the user interface using satellite assemblies.
These can come in handy for other projects as well. We hope they save
you some time!
President, Funduc Software Inc.