DBM - A New Task Management Tool


Let’s assume that there is a team of developers working together on a project.

It’s important, to write down every task, issue and problem, which needs to be addressed during the course of development.

  • Once a problem is on the task list, it might be delegated to another member in the team, capable to follow up the task.

  • For each task, a responsible person might be assigned, a target date might be specified and maybe also the working progress might be set (0% done, 25%, 50%, 75%, 100% done).

  • … and of course, the task-list needs to be edited and follow-up on a daily basis.

The simplest way for such a task-list would be to create an excel sheet and use it as a kind of task-list to drive the project.
But hold on, although this can be done, it is not really the way to go.

In fact, such a task-management-application does not need to be complex.
The key is a simple application which can be used simultaneously by each member of the team.


  • Create a simple and easy to use application which can be used within a group of people to follow up tasks.

  • From a user point of view, the software should be fairly simple, the main focus is to work on one common source of information in real time.

  • The layout of the database (table) or interface should be freely editable and definable (just like in a spread sheet application).

  • Data handling and management (to enter information, to filter existing data) should be intuitive and fast (without extra dialogs which needs to be filled in, etc…). In fact, the whole data management process should be somehow click-optimized.


  • The application should be fairly easy to install, with no prerequisites to be installed and as less dependencies as possible.
  • The software does not necessarily to be a web enabled solution, just needs to have multi-user capability.
  • No cloud based information storage wanted (for security), ideally the database should be just a file on a shared network drive.

Some more thoughts

Nowadays task management software is quite popular and most of the available solutions are web-based.

  • The advantage of getting access to the actual task-list over the web has some charm, but is not always wanted.

  • Because of security reasons, it might be a better solution to share information over a VPN tunnel with defined access rights.

  • The PHP/MySQL/Apache stack sometimes is a bit overkill and of course you need a provider.

  • And what, if your network is not attached to the www and has no web server running ?…


With tcl/tk in mind, it soon becomes quite clear of how the implementation of the above mentioned requirements will look like.


SQLite for the database, there is no question about it, great thanks for this amazing piece of software.

The only question left for me so far:

  • is sqlite really capable to handle multi-user access ?

  • can the database file be located on a shared network drive (and maybe the share is accessed over a remote VPN connection)?

  • and what, if for whatever reason the database file should be accessible over the net & provided via http and a web server?

    O.k. that’s definitely not the aim of sqlite (server-less), but there is always a solution… In short: later on, I discovered that actually it is possible to implement a small PHP layer which can bridge the sqlite access.

Let’s find out…


tablelist for the main part of the GUI, there is also no question about it.

  • tablelist is a pure tcl/tk package, which I normally prefer in order to keep things simple
  • tablelist is active developed and thanks to Csaba Nemethi, there was a lot of improvements done recently
  • I also feel quite familiar with tablelist and I really like this package.


BWidget still comes in quite handy to build the GUI.

Some goodies to point out:

  • nice and useful GUI widgets,
  • easy to program with a clear interface and good documentation,
  • the package is still maintained and there is a good maintenance and bug fixing, (although there is not so much new development going on so far),
  • has been adopted to work with ttk

DBM Usage

It took me quite a while to develop the program, but here it is!

Short overview

The DBM is essentially an application that allows to create and manage arbitrary (database-)tables.

Tables may e.g. work-lists, to-do lists, checklists, etc. Thus, the DBM is suitable as a task management tool within a team.

Features in brief

  • The DBM is based on SQLite, whereas the database consists of only one file.

  • The database does not need a server.

  • Any number of users can edit the same database table at the same time.

  • The database file is not “locked”, changes are made under transaction control, i.e. as long as a transaction is not completed, it will not be visible to other users.

  • Database changes are updated within the GUI with the help of the “Refresh” button.

  • There is no “save data” - changes are saved directly in the database!

  • A database manager (based on tkSQLite) is available for managing the database tables.

Main dialog window


Table layout and value entry

The behavior of a database table entry can be controlled via the corresponding type declaration.

So for instance, if the type declaration is TEXT, a text entry window is automatically available to enter text. Or if the type is declared as DATETIME, a date-chooser dialog pops up automatically.

The following type declarations are possible:

Attribute:Usage / assigned function:
INTEGERUnique line number, usually: PRIMARY KEY UNIQUE NOT NULL
DATETIMEDate, date-chooser dialog box will be displayed
TEXTText input, text editor will be displayed, the text editor window also allows to enter multi-line text
BOOLEANYes / No Switch, when clicking on a field, the status is changed immediately
NUMERICin conjunction with the DONE% keyword, a filter dialog-box will be displayed

Example - showing a typical table layout

CREATE TABLE 'Project_X_Worklist' (
    'Description' TEXT,
    'Remark' TEXT,
    'Johann' BOOLEAN,
    'Hugo' BOOLEAN,


The DBM is meant to be: a replacement for a spreadsheet to manage open issues within a group of people.

For what the DBM is not meant to be: as a replacement for a database. The DBM works in the background exactly the same as a database application (SQL driven), although it’s intention is to be a tool for entering and sharing information in a quick and easy way.

Function overview

File Operations

folderOpen Existing Database…Select existing sqlite database file.
application-default-iconCreate new Database…Use this function to create something new.
edit-closeClose Database…Use this function as usual to close the a actual database.
Clean temporary files…Used to wipe out user settings from the system’s TEMP directory.Once deleted, the application needs to be closed and re-opened.
folder16Export all available Images…Images (if any) can be exported to file.
The function asks to specify the export directory.
All images are organized in the export directory as sub-folders according to their individual table item number.

accessories-text-editor Database Manager…

The database manager allows to manage the underlying database to its full extend.


  • Make sure to create a backup before modifying the database.

  • If there are images available on the database, it might be a good idea to export this information as well.

  • If a table is deleted by accident, all data is lost, there is no undo function implemented.

  • Changes on the table layout can be done at any time. Once a change is done, the GUI needs to be re-opended.

The following nomenclature is used for internal tables:

  • _images required for image storage, images are directly written to the database as BLOB (binary large objects). The corresponding image table will be created automatically for each data table.
  • sqlite_sequence Required internally for the sequence counter. Under no circumstances delete this table.

Backup & Restore

  • Create Backup File...

    Creates a snapshot file of the currently open database. In general, it is recommended to use this function periodically to create a backup copy.

    • This function can be called at any time.

      On the other hand, backing up the database file with the file manager is not recommended, doing so, the data integrity is not is ensured.

    • The Create backup function uses the API of the database, so it also takes care of data integrity even if there are more than one user accessing the database at the same time. The database will not be blocked.

    The backup file will be stored side by side to the actual database file (same name, but with *.bak extension).

  • Restore from Backup...

    This function restores all tables and informations from an existing backup file.

    Attention: Be aware, that all changes which could have been done in the meantime are lost!

Tablelist functions

edit-find-5RefreshRe-read all table information according to the actual database information.
edit-copy-6New ItemInsert a new data entry.
Database item is selected: the new item is inserted directly after the current selection, all following rows are pushed down, row numbering will be modified accordingly.
Nothing selected: The new item appears after the last row.
archive-removeDelete ItemThe currently selected row will be deleted. If there is nothing selected, no action takes place.
edit-redoRecalculate IndexAllows to re-calculate all row index numbers (1st column).
document-exportExportAllows to export a database table as an excel file.
Remark: Only those information, which is visible in the dialog is exported (what you see is what you get).

Image handling


There is a basic functionality available which allows to attach images (e.g. screen-shots) to each individual row entry. The number of images per item is not restricted.

Big sized images are shrinked down to a predefined size. This might take some time. For each image a thumbnail is created in parallel to speed up the dialog a little bit.

Export tablelist to Markdown



The Markdown2Go executable needs to be stored in in the same directory as the DBM executable.

Note: If required, columns can be hidden before starting the export. There is a no-show filter (right mouse button in the tablelist widget) available for doing that.

Preferences / Settings


Font Selection DialogHint: font types with UI in the name are (maybe a bit more) easier to read.
Automatically openWhen enabled, the previously selected table is automatically opened the next time the program is launched (recommended setting).
Side-panel animationEnable/disable a dynamic effect of the side panel.
Scroll to bottomScroll down automatically to the bottom once a new table will be opened or the refresh button is pressed (recommended setting).
Fixed title columnIf enabled, the 1st column keeps visible all the time (recommended setting).
Allow resize-able header itemsIf enabled, it is possible to move each column of the tablelist individually (if in doubt, leave this option deactivated).
Enable move over effectIf enabled, a visual effect is shown when hovering with the mouse pointer over the tablelist.
There are some side-effects with the arrow navigation, so for the moment this option is stated as experimental. (If in doubt, leave this option deactivated).
Additional row spacingTo add extra space above and below each tablelist row (in pixel).
The value 5 is recommended to make the table more readable. Once this setting is changed, it is required to re-open the actual tablelist window.
Header max.heightAllows to specify the max.height of the header line (in pixel). Default is 60px. Once this setting is changed, it is required to re-open the actual tablelist window.
Imagepanel heightAllows to specify the height of the image panel (in pixel). The default value is 100px.

DBM Software

Last modified date: 09.05.2020