| Home | |
![]() |
Database Usage |
| Prev | Next |
At the time of writing, the software described in this chapter is still in an experimental stage, and loss of data is possible. Please ensure that you have an alternative backup copy of your data before committing to database usage.
As of release 1.0, KMyMoney allows you to hold your data in a relational database. One of the advantages of using this industry-standard format is that it may allow you to view your data using one of the graphic front ends such as OpenOffice.org©, perhaps in some format that KMyMoney currently doesn't provide. Also, a little knowledge of SQL (Structured Query Language, the language used world-wide to access relational databases) should enable you more easily to extract data to feed into some external program, as for example a budgeting application.
It should be noted that the current release of the program merely treats the database in the same fashion as an ordinary file, in that it reads all the data into memory when opened, and writes updated data back when closed. A more conventional method of database access, i.e. reading and updating data only as required, is planned for a future release.
To access the database, KMyMoney uses the SQL module supplied by Trolltech® as part of their Qt® programming system. This module supports a number of different database systems through a collection of drivers. Among the more popular open-source systems for which drivers are available are MySQL®, SQLite and PostgreSQL The module also supports the 'heavier', more industrial, systems such as Oracle® and IBM DB2®
With the exception of SQLite, these systems use a client/server model, where the 'client' software sits on 'your' machine, whilst the server lives on the same machine as the database itself, which may be elsewhere on a network. Of course, in the normal scenario for a personal finance application such as KMyMoney, 'your' machine acts as both client and server. Your first task therefore, having decided which database system you wish to use, is to install the client, and most probably server, software.
(SQLite does not operate on a client/server model; each database is held in a regular file, local or remote, accessed using the normal methods supplied by the underlying operating system. In this case, therefore, there is only one software package to install.)
In addition to the database software itself, you must also install the corresponding Qt® driver module. Most distributions will include driver modules for the more popular databases. Otherwise, check with the Trolltech web site and search for 'SQL drivers'
Looking after databases is a little more complex than dealing with regular files. Each system has different methods for performing those necessary administrative tasks such as initial creation, assigning permissions to various users, producing backups etc. Describing these is outside the scope of this manual, but all of the supported products provide comprehensive reference documentation, and a quick search of the web will point you at many tutorials on the subject.
Code has been included to create an initial database to hold your data if one doesn't exist (currently only for MySQL and SQLite). However it is strongly recommended that you pre-create a database, because most of the products provide a number of options which may be relevant. One that may be of particular importance to some would be the designation of the character set (e.g. UTF-8) to be used for text fields.
You will also need at this time to specify permissions for various users to perform different operations on the database. In most systems, the user who creates the database will be automatically assigned all permissions, but this is an area in which the documentation should be consulted.
For your first usage of the database, and occasionally at other times when the database layout changes, you will need permission to create and alter tables (see next paragraph). For normal running, you will need to be able to read and write records; these are normally defined in SQL as SELECT, INSERT, UPDATE and DELETE permissions.
On your first usage, KMyMoney will attempt to create the necessary table structures. In order to achieve the maximum compatibility between various database types, only a subset of common data types are used. There may nevertheless be situations where a particular type is not supported, and in this case, provision has been made to generate the SQL code necessary to create tables. This code can then be modified as required and used to create the tables outside of KMyMoney. Should you find yourself in this situation, help can usually be obtained from <kmymoney2-developer@lists.sourceforge.net>.
Using KMyMoney, open or import an existing data file, or create a new one. Then select 'Save as Database' from the File menu. This will present the following dialog:
This box lists all Qt SQL drivers installed on your system. Select the driver for your database type. If the one you want is not in the list, you need to install the appropriate driver. See your distro documentation, or visit the Trolltech web site and search for 'SQL drivers'.
The default database name is KMyMoney, but you may choose some other name if you like. SQLite has one database per file; selecting this driver opens the file dialog. For database types other than MySQL, the database name must be pre-created, though KMyMoney will create all table structures where necessary.

For the average user, the default name of localhost, being the machine you are currently using, is correct. For networked databases, enter the connected host name.
Check the permissions set up on your database, or contact the database administrator, for the correct values to use here. The user name must be capable of selecting, deleting, inserting and updating records. If the user name is the same as your login name, a password is not normally required.
To access your data in KMyMoney, use the Open Database entry in the File menu. This will open a dialog similar to the above.
To access your data in other formats, you will need to know a little about how it is held in relational databases. By far the easiest way to get a feel for this is to open the database in a front-end such as OpenOffice.org. This provides a list of the various tables which go to make up the database, and enables you to see the layout of each of them.
To extract data, e.g. into a spreadsheet or external file, it is almost invariably necessary to select linked data from one or more tables. This is done by 'joining' the tables, using a field which is common to each. You can find a lot more information about how this is done from the online tutorials mentioned above. The following table lists the fields used to define these inter-table relationships.
Relationship |
Match |
With |
|---|---|---|
Institutions and Accounts |
kmmInstitutions.id |
kmmAccounts.institutionId |
Accounts Parent/Child |
kmmAccounts.id |
kmmAccounts.parentId |
Transactions and Splits (see Note 1) |
kmmTransactions.id |
kmmSplits.transactionId |
Accounts and Splits |
kmmAccounts.id |
kmmSplits.accountId |
Payees and Splits |
kmmPayees.id |
kmmSplits.payeeId |
Schedules and Transactions |
kmmSchedules.id |
kmmTransactions.id |
Transactions and Currencies |
kmmTransactions.currencyId |
kmmCurrencies.ISOCode |
Accounts and Securities (see Note 2) |
kmmAccounts.currencyId |
kmmSecurities.id |
Securities and Prices |
kmmSecurities.id |
kmmPrices.fromId or kmmPrices.toId |
Currency Rates |
kmmCurrencies.ISOCode |
kmmPrices.fromId or kmmPrices.toId |
Notes:-
1 – txType = “N” for normal transactions, “S” for scheduled transactions
2 – if kmmAccounts.isStockAccount = “Y”
Several of the data fields are held in an internal format which may not be immediately useful to external programs. In these cases, the information has been duplicated in both internal and external formats.
Monetary amounts and share values are shown both in numerator/denominator format, and, with a field name suffixed with 'Formatted', in the form as shown on your screens.
Similarly, some fields such as account type appear both as a numeric code, and in a field suffixed 'String' in the form and language of the application.
Having data in an industry standard format does give you the ability to modify it outside the KMyMoney application. DON'T DO IT unless you really know what you're doing, and always be certain to make a backup copy of your data first. If you get it wrong, KMyMoney may not be able to access your data, and you could even end up losing it altogether. You have been warned!
Most database systems allow you to store commonly used queries and procedures, and in some cases, these may be held as tables within your database itself. As you will have guessed from the above, all the tables used by KMyMoney begin with the lower-case letters 'kmm'. This standard will be maintained, and only tables beginning with these letters will be updated. Thus provided you avoid these in the naming of your queries etc., you should not experience any problems.
If your table is of medium or large size, you can see considerable improvements in loading and storing times by creating an index on the Splits table. This is done from the command line as follows:
tonyb:~> mysql KMyMoney # or whatever your database is called ... mysql> CREATE INDEX tx on kmmSplits (transactionId, splitId); ... mysql> quit Bye tonyb@CROW:~>
| Prev | Home | Next |
| Anonymous file | Up | Reference |