Monday, September 03, 2007

Sharing the database accorss Local Area Network

Open Contacts uses Firebird database server as database engine. By default, OC uses Firebird embedded which is installed implicitly. Open Contacts is very much self-contained.

If you prefer using OC in office environment where people using multiple copies of OC will share the same set of info of business contacts, a standalone Firebird database server should be installed.

Assuming that you have installed Open Contacts on computer "MyClient1" and are going to use computer "MyHost" to host the database and linked files, here are the steps:

1. Download and install Firebird database server.

1. Download Firebird for Windows

Firebird is an open source FREEWARE program that can run on Windows, Linux and Unix. Please visit

for general info about Firebird. It is recommended that you use the latest production version of Firebird.

2. Install Firebird

Generally, the host machine is a server machine in your Local Area Network. For example, you may install Firebird on computer "MyHost".

During the installation, the installation program will ask you whether you want the database sever to run as a Windows service or Windows application. In general, you should make it run as a Windows service.

3. Copy "udfoc.dll" in computer MyClient1 to directory "udf" of the program directory of Firebird which is installed in computer MyHost.

And "udfoc.dll" comes with Open Contacts, it is located in directory "udf" of the program directory of Open Contacts. In the host computer MyHost, you should place "udfoc.dll" in directory "udf" of Firebird program directory.

4. Make sure that any firewall program or antivirus program on the host machine allow Firebird to listen to client requests.

2. Prepare database files on the server

Assuming the server machine is "MyHost".

1. Create a secured directory (for example "D:\SecuredData\OC") not accessible across the network but the Firebird database server only.

2. Move database file "Default.gdb" from MyClient1 to "D:\SecuredData\OC". Thus, no client computer should be able to access the database file directly through networking file sharing, but through Firebird database server only.

3. Create a working directory (for example "D:\WorkData\OCData") shareable by some users across the network according your local security policy, and move file "main.ini", directory "templates" and directory "files" to the working directory from MyClient1. Please make the files directory writable by these users. The working directory may be accessed through something like "\\myhost\SharedOCWorking" which points to D:\WorkData\OCData.

4. Modify main.ini to make the database settings point to the server machine as described below.

The INI file contains pointers to to the address book database, as shown in the example below.


The user name/password pair is used for authentication to the Firebird databases "default.GDB" and "demo.gdb". Both files are located in "d:\secureddata\ocdata\" of the host machine "myhost". Thus, Open Contacts knows it should connect to server "myhost" and talk to the Firebird database server there. Then the database will process the database file in the host machine's D drive and authenticate the user name/password pair.

Though file "main.ini" sits as a shareable file on computer "MyHost", the settings are used by Open Contacts running on computer "MyClient1". Thus the settings need to tell Open Contacts the host name "myhost".

5. Test. Create a program shortcut on computer "MyClient1" with the Target directory pointing to the program directory of Open Contacts, and the Start-in directory pointing to the working directory located in "\\myhost\SharedOCWorking" . Run Open Contacts via the shortcut.

3. Install Open Contacts on each of the workstations (client machines)

After positive result of the test, you may start clone the program and shortcut on every workstations.

  1. Run setup.exe.
  2. After finishing the installation, double click on shortcut "New Open Contacts Book".
  3. In the "Locate Working Directory" dialog, select "Locate working directory and create shortcuts".
  4. In the Folder Browser Dialog, select "\\myhost\SharedOCWorking".


It is perfectly fine to install Open Contacts in a network share directory, so all client machines may use the same copy of Open Contacts program files. So you just then need to create shortcuts on each workstation.

A common error was to set the database path to a network path, for example
where Z is a mapped network drive. This won't work.

Thursday, August 23, 2007

Conversations between users and support

When I invoke the newly downloaded and installed OpenContacts I get the message:

"Can not find working directory. Please specify one."

Then it goes to the "Located Working Directory" panel which gives three options with radio buttons. I leave it to the default which is "Located Working Directory" and then click on "Proceed".

I then locate the working directory and a panel comes up saying:

"The working directory of Open Contacts is X:\home\pavneet\share\OpenContacts"

When I click on OK I get the error:

"EZSQLException--Requested database driver was not found while connecting to db server X:\home\pavneet\share\OpenContacts\DEFAULT.GDB"

Is it possible that the older GDB doesn't work with the new Open Contacts?

Many thanks.

Support wrote:
Open Contacts works on a working directory generally indicated by the shortcut. Please refer to the Installation manual for details.
The latest version is v4.1.7.

I guess drive X is a network mapped drive. If so, embedded Firebird does not support accessing database in network drive. Though db engine like MS Access can access network drive, however, accessing network shared database file is never a reliable solution. If you desire to share the database across local area network, you should refer to the Networking charter of the user manual.

I find a little bug in open contacts version and oldest versions. I am french and so use accentued characters and special like this ç.

The bug is with some of search functions.

In fact, with action search (F2), there is no problem, if i type any accentued characters in case name, the result give whole items with this characters. It is very well. With action quick search any field, there is no problem too, if i type one accentued character in the two first letters of query, i obtain whole fields with this two letters. It is very well. (nota : i have observed that quick search any field mind quick searh any field except contact name).

But with the two other search functions is no good.

Quick search by contact name. I have recorded in data base one person with name who have one accentued character like initial. When i type in quick search by contact name window this accentued character, none name is proposed (the list is blank). When i type this accentued character and the second letter of the name, the list is update with the good person. On windows i can read the name with the accentued character. I have recorded in data base persons with given name françois. When i type in quick search by contact name window the character ç, none name is proposed (the list is blank). When i type this character and the second letter of the given name (the o), the list is update with the good persons with françois as given name. When i type in quick search by contact name window the letter before the character ç (the letter n), the list is update with persons who have character n as name's initial. When i type this character n and just after the character ç, the list is update with the good persons with françois as given name. In fact quick search by name function seem unable to read only one accentued character or special character.
In the quick search windows, it is by design that you need to input the second character to get result. The search is not to search the initial characters only, but the entire string.

In predefined sections, for predefined fields with action person (F9) or org (F9) when i use for person or company a name with accentuated character, the action person (f9) or org (f9) don't find something in the database. If the name of person or company is writted without accentued or special character, the action (f9) find the good item in the database.


This was a newly introduced bug, and was just fixed. Please download v4.1.5 on Friday.
I have 2 bugs to report:
1. If I'm trying to sent an email to more than 100 people, I get an error message "too_many_recipients" (see also attached OpenContacts-error-too_many_recipients.JPG). I'm using the latest version of Thunderbird - version (20070728).
As the message is from MAPI of Windows, apparently there is limitation of mapi for sending Email, say, not more than 100? recipients. I think this has nothing to do with Thunderbird or any other Email client. MAPI is a Windows standard way of communication between caller like Open Contacts and any Email program conforming MAPI. I think this might be a Microsoft way of limiting spam mails.

To work around, you may set Options -> Applications -> Default Email -> Email Launcher. When sending Email, select Thunderbird.
2. I have also problem with diacritic marks in "Quick View" window. My native language is Czech and of course lots of people are having names with diacritic marks. Everything is shown properly in "Edit Person" window as well as in "People" list, but the diacritic is bad in "Quick View" window (see attached OpenContacts-error-bad_diacritic_marks.jpg).
Right click on the Quick View window, select Encoding -> UTF8. After refreshing, things will be displayed well. You need to do this only once generally.

Because I like your program I can offer you translation to Czech for free.
Thanks, that's very kind of you.

Please refer to this first

When you are ready, please give me a yo and I will send you the most recent PO file.
To Fonlow Support: Another added feature that you may want to consider is the ability to use an external third party report writer. I have used Crystal Reports in several Federal Government projects here in Canada and it saved me a great deal of time since I did not need to write the actual code, just the background query. The ability to select a group of contacts from Open Contacts and then to click on a "Custom Report" button would greatly enhance the utility of Open Contacts. I have browsed the Source Forge website for report writers and got numerous hits, not all suitable for use with Open Contacts but there were several that showed promise. By implementing this interface to an Open Source product you would add functionality without needing to actual program the report writer.
Using CSV or Excel files exported is a common way of using 3rd party report writers. While the example illustrated in the user manual is Avery Design Pro which is free, you may use similar programs supporting CSV or Excel. I am pretty sure you can figure out how to use, and likely, I hope you would share your experiences with fellows.
To Fonlow Support: I am continuing to use Open Contacts for a few different volunteer projects and have encouraged others to use it as well. There are 2 features that would be quite useful to me and others.
1. When printing a standard report allow the use of standard letter paper (8.5 inches by 11 inches) in addition to A4 size. In Canada, even though we are metric, our paper comes from the U.S.A. which is not metric and A4 paper is extremely difficult to find.
2. The ability to have nested categories is a valuable feature but it would be good to be able to show only the highest level categories in the Categories window as a default at start up.

Thanks, Ed Philpott

Both are already there.

For printing on different paper sizes and formats, check user manual -> Print -> Use 3rd party label printing program. It is common to delegate this kind of jobs to dedicated label printing programs.

If you want to show all at startup (with highest level category), in options window, make sure "Remember Category" unchecked (by default).
> Hello,
> I expected by pressing an empty new section 'personal' as
> the section 'work' is completely empty.
> I get like in the screenshot everytime in the first 4 lines prefilled
> informations I do not want.

I just analyze your database file. Though I know how to remove some garbages using database tools, however, it might be easier for you to do the following steps:
1. Using OC v4.1.2, run Search, select Both People and Companies, select all of them.
2. run Export to XML with Options, check these: Categories, Links to other contacts, Settings. And save them to an XML file.
3. Get a fresh copy of default.gdb. A lazy way is just to install OC again and overwrite default.gdb.
4. Import the XML file.


We are running Open Contacts (v.3.9.5) and would like to duplicate the entire database (i.e. everything on it) so that we have two versions with the same information running. The reason we would like to do this is that we would like to try reorganizing our categories on one version to see if we can make it more efficient, but still need the old version running for day-to-day business.

I have referred to the user manual -> Multiple databases.

I do not understand how to copy an existing personal folder to a specific folder as a new personal folder. I know where the “start-in” folder and “target” folder are but do not know what the personal folder is nor what is meant by copying ALL files to it. What then is the “data folder” in the “personal folder” and how do I need to change the “main.INI” ?

How then do I launch the two different versions? Unfortunately we do not have a system administrator so I do not know about LUA concepts.

The latest version is v4.1 and the user manual got update. Please refer to it. By the way, a local admin, full time, part time or contract is good for the health of local computer networks.

Foremost I need to tell you I find your program really great. Exactly what I was looking for.

I’d like to use OC for my company and share the contact database on our UNIX host. However, according to our network engineer, your program admits only Firebird in its Windows version. What should I do to use OC on Windows clients from a database host on UNIX?

We don't have an UNIX server for testing. However, according to general client/server SQL engine, the client should not be aware of the OS of the host machine. All the client care about is network protocol. The latest version uses firebird 2.0 protocol. Please make sure you have Firebird 2.0 server running on the host machine regardless of the OS. Please check relevant newsgroup for further support of how to install and use firebird.

By the way, the latest version is v4.1.1.498 Beta.
I installed Open contacts version 4.0 on Windows Vista.
Immediately after the installation, the program open normally. After I closed the program and have tried to reopen the program, it haven't worked.
I can open the program. I have always received the same error message:

EZSQL Exception -- SQL Error: operating system directive CreateFileMapping failed Access is denied. Error Code -- 902. Unsuccesfull execution caused by a system error that precludes successful execution od subsequent statements while connecting to db server.

Though the file DEfault.GDB is at the good place.

I checked the securiy, but I saw nothing who can interfere with your program.

Do you have a solution.

This is related to a bug in Firebird Embedded v.20.1 for handling
stricter access control of Vista with CreateFileMapping call. The
solution is to replace v2.0.1.12855 with v2.0.0.12748, until Firdbird
has come up with a bug fixing release in the future.

Please download Open Contacts v4.1.1.498, with firebird embedded driver
v2.0.0.12748. This should be working well in Vista.


I am investigating to use OC for our prayers-members in the Netherlands and perhaps abroad.

Your program seems to suite very well.

To complete other fields in an existing record: do we have to indicate the field(s) to be
filled-in, since the Edit-screen "only" shows fields that were filled before?
You can add fields to any sections later.

Or is there an option to display always a "full section" (with all fields), even some fields
(for that moment) are NULL / EMPTY ?
There are also ways of add multiple fields to a section. For example, the first time you input phone number to section Personal, thus you have only one field in the section after saving the record. Later, you might want to input fax, email and address etc., you may just add section Personal, fields of the section will all be added.
I am a very happy user of Open Contacts and use it for a number of purposes - not just to store contacts!

Recently, I also downloaded QuickSearch - but have not been able to use it.

I am using OC as a 'portable app' on my USB hard-disk. The database [ DEFAULT.GDB] is in a directory 'data' within the OC directory (so the main.ini file has been edited to reflect this).
But on using the QuickSearch box, I get the following sequence of error windows:

The Quick Search program communicate with Open Contacts through COM (Common Object Model), which require local registry. Generally OC is an out-of-process COM server, however, when running as portable application, by default, it becomes not a COM server as this is a basic requirement of pure portable.

If you really desire to use, you may change, and make DisableCOM=0. Then OC will write something to the registry to remember the last database it used.

I am using the "Demo Data" part of Open Contacts to set up a second separate database. Are there any limitations on using this? Any limit on record numbers, sections, fields, note lengths etc? I do not want to put half of my database in and then hit a roadblock.
Demo Data is only for new users to evaluate features with some data. It is not recommended to use the Demo data link as a secondary address book, and actually you may disable this link in Options. Please also refer to the charter of Multiple address books in the manual.
Apparently, the current version of open contacts is not compatible with either firebird 1.5.3 or 1.5.4, i have tried both. It gives the following error trying to connect to the server machine:
"EZSQLException--SQL Error: unsupported on-disk structure for file c:\mydatabases\oc\default.gdb; found 32779.10, support 1242556.2097152. Error Code: -820, wrong or obsolete version while connecting to db server\mydatabases\oc\default.gdb"
same error with either the ip address or machine name of the server. udfoc.dll is resident in the firebird udf folder, main.ini is edited for the above database location. Same error running open contact on the server, or on a different machine connecting to the server.
XP SP2 currently patched. Some services are disabled, but none that should affect firebird.
Any idea what's wrong?
What you found is right. Please use firebird 2.0 or above.
Im trying to export a contact to vcard file. The problem is that only the name of the contact is exported when i open the vard file. How do i do to get the adress and all the other information to the vcard file?

While OC support flexible data field management, it is good to keep consistent practices of using section names and field names, in order to exchange info with other system, in this case, vCard. As you might guess, there's should be a mapping between OC fields and vCard fields. Such mapping is defined in ExportVCard.xml in the templates folder close to your address book database. You may use any text editor to modify the mapping. I have to assume you have some basic knowledges of XML and vCard.

I love OpenContacts! It has worked very well since I started using it several months ago. However last night I had a major failure of my database that occurred in a matter of minutes. All of my precious data has been lost, and (much to my embarrassment) the last time I did a backup was April 19th.

My question then: Is anyone there willing to attempt a recovery of my database? I can't tell you how devastated I will be if I've lost four weeks worth of work. The error message I get pops up after 95% of the "loading graph" has displayed, which says:

Object: TRmMain--EAccessViolation~Access violation at address 00711E36 in module 'OpenContacts.exe'. Read of address 000000C

I'm not sure how the database became corrupted, but I closed the database and tried to reopen it minutes later without success. I'm a programmer of 35 years, so I know there MAY be some way to peel back the source code to know exactly what is happening, unfortunately I don't have the time or resources to do that right now. If anyone is willing to help me, I'd be happy to send (what's left) of the database as an eMail attachment. The database is currently 2,552Kb in size.

Eagerly (and desperately) hoping to hear from you,

You may try GFIX, which come from the Firebird SQL package. Gfix.exe is located in the bin folder. You may download either the embedded firebird or the normal one from It is a commandline program, and running "gfix.exe /?" you will get hints of parameters.
thank you very much for your excellent program. I'm still undecided on using it, but am considering strongly.

I found that the quick view window does not display some special characters correctly, for example, german umlauts (ü, ö, ä, etc.)

Thank you for considering this.

Right click on the quick view, and select encoding utf8. This is an one off operation.
I look in your XSL and try change it. I can get age from birthday. I read more about XSL and can change XSL for my. But I get error, when I try work with CSS. Because I like do simply your XSL and format color via CSS.
From web I read, that this will be make. But not in your XML stream and XSL template.

Though we provide open architectures for customizing Open Contacts, we don't do technical support to technical questions of XSL and XML etc. I hope you find this is reasonable. You might be able to get advices from some XML/XSL gurus through wrapping and postings your questions to appropriate news groups.

I download Open Contacts today and I have a question about relationships.
When you link two people under "Contacts" tab, you can specify non-working relationship. For example "Linda Lee is Spouse of Andy Will".
When you link two people under "Associated" tab, you can specify working relationship. For example "Linda Lee is Boss of Carla Fieldhouse".

First question: I'm right?

If the answer is yes, Why an "Associated" A-B in A's card, is shown as "Contacts" association in B's card?

I hope my english was good enough to transmit my dudes.

Yes, these are designed features. The Associated tab is the other way of view upon the Contacts tab.


Sunday, July 29, 2007

Where is the recycle bin of Open Contacts?

Where is the recycle bin of Open Contacts?

It is by design that Open Contacts does not provide Recycle Bin functions. When you delete contacts, you should know what you are doing.

If you don't want the contacts to be too crowed with never contacted contacts and want to re-access the info of deleted contacts in the future, you have a few options:

1. Before making deletion, backup the database, and name it after a naming convention reminding you the purpose of the backup.

2. Export selected contacts to an XML file first then delete contacts.

The second option may be more handy as the XML files are text files which can be searched. So you can

easily locate legacy contacts, and reinstate the info of these contacts by importing the XML files.

Saturday, July 28, 2007

Making Open Contacts portable

It is easy to make Open Contacts be accessible through PortableApps Start Menu by copying program files and data files under [PortableAppsRoot]\PortableApps\OpenContacts. Open Contacts by default will use the program (target) directory as working directory if working directory is not specified. However, PortableApps somehow would list fbclient.dll in the start menu. As this visual effect is obviously undesirable, we had made a distribution package optimized for PortableApps.

When being launched from a portable device, the INI file has better to have setting "DisableCOM=1", then Open Contacts will not respond to COM client call, as in general practices, a portable program has better not to be a COM server. And actually the memory footprint is around 250KB less with this condition.

The proxy program "Open Contacts.exe" basically have only one statement:

ShellExecute(0, PChar('open'), PChar( ExePath+'app\program\OpenContacts.exe'), '', PChar(ExePath+'data'), 1);

Monday, July 16, 2007

Backup address book

No matter how you store your contact info, on paper, PC, PDA or Web, you may have realized the importance of backing up data. If you store contact info electronically, you may sync data between PC, PDa and Web. So if you lost data on one of the platform, you may restore the data from the redundant storages of other platforms. However, synchronization sometimes still stuff things up, resulting corrupted data on all platforms.

Therefore, don't be lazy, and just backup your data regularly.

Use the built-in backup function of OC

This function will use the default mechanism of backup of Firebrid database to make a backup file of the GDB file which store all your essential contact info. The backup file is generally 1/10 of the size of the GDB file. You may then copy the file to external medias.

To restore, run Open Contacts, and run command "Restore" and locate the backup file, then the backup file will be restored and current GDB file will be overwritten with the restored one.

Copy data files

After closing Open Contacts, locate the GDB file of your address book, and copy it to an external media such as CD-ROM-R, as you will do for backing up other important data. If you have contacts with linked files and some custom templates, you may want to backup all content of the user data directory. A recommend practice is to store all these data files into a zip file.

To restore, make sure OC is close, and copy the backup files to overwrite files in the user data directory.

Export to XML

With version 4.1.1 or above, you may "Export selected contacts to XML with options". With the combination of "Categories", "Linked Contacts", and "Settings", you may export contacts, predefined fields, predefined sections and settings into a single XML file.

To restore, open OC and import the XML file. As the XML file preserve all contact info and settings, you may use feed it to other high end information management systems as you expand your business.

Friday, July 06, 2007

The Hidden Powers of Open Contacts

One of the design principles of Open Contacts is: adding more features without crowding or complicating the user interfaces.

Comparing with the main windows of version 1 and version 4.1, they look very similar. And actually the higher versions look simpler.

As the program is used by large varieties of audiences, we generally let the users decide whether to turn on new features provided, when they feel they need something more. Many of the new features may be activated only when appropriate checkboxes get checked in the Options window.

Though the default features of Open Contacts have already suppress many other address book programs, if you are feeling that you want more from Open Contacts, it is time to evaluate those settings in the Options windows after reading "What's New".

Friday, June 22, 2007

Roadmap of version 4

Since the release of version 4, the development based on version 4 began.

Action Plugin

An Open Contacts action plugin works upon the data of current dynamic data field, providing the Action button with extra menu items. Each of such menu items may trigger a program which take the field data as parameter.

Each plug-in for a custom field is contained in a folder, and all plug-ins are stored under a parent folder called "ActionPlugin". Each plug-in may contain one or many programs that take one parameter for execution. Folder "ActionPlugin" is located under the program folder

This feature was implemented in version 4.1.


While writing a standalone program of interacting with Open Contacts is good, in some use cases it is more desirable to have the program running in process with Open Contacts. For example, for additional functions of importing and exporting, it may be good to add buttons to Open Contacts and the users may press the buttons to call related functions.

The buttons will appeared in a floating command bar accommodating commands handled by these programs.

The structure for such features is plugin. The implementation of the structure will be similar to the Action Plugin.

Data exchange with Microsoft Live Contacts, as plugin or standalone program

Yahoo Map services

Distributed Social Networking

Plugin of custom actions

Open Contacts v4.1 Beta is released to introduce extensibility. Open Contacts will allow the end users of different programming skills and professional software houses to develop plugin programs in order to utilize contact data with other programs.

The designs of the interfaces of the action plugin considered the follow factors:

  • Simplicity. The programming interfaces must be simple and easy to maintain. The interface functions should be limited, and the plugin will not change the overall user interfaces too much.
  • Easiness. The development of the plugin program does not necessarily require professional development tools like Delphi or Visual Studio. The programming interfaces address the needs of users of different programming skills. From computer literates to programmers, they are going to find a suitable form of development.
  • Extensibility. The infrastructure of the plug-in will allow the developers to construct the development through simple delegations.

As results, now the end users can construct plugin programs using URL queries, vbscript, executable program and dll program.

For more details, please refer to the Developer section.

COM Interface Reference

COM Interface Reference

COM Functions by Group:

Load a set of IDs of contacts

These functions will access listed contacts in Open Contacts windows, and load a set of IDs of the contacts into the Contacts Buffer and return the count.

HRESULT _stdcall GetSelectedPeopleCount([out, retval] int * v );

Reset the Contacts Buffer with selected contacts in the People List window and return the count of selected contacts. That is, the Contacts Buffer will have IDs of selected contacts.



Return Values:

v -- Output the count of selected contacts.

HRESULT _stdcall GetPeopleCount([out, retval] int * x );

Reset the Contacts Buffer with all personal contacts, and return the count.



Return Values:

x -- Output the count of all personal contacts.

HRESULT _stdcall GetListedPeopleCount([out, retval] int * v );

Reset Contacts Buffer with all listed contacts in the People List window.



Return Values:

v -- Output the the count of listed contacts.

HRESULT _stdcall GetCompaniesCount([out, retval] int * v );

Reset the Contacts Buffer with all organizational contacts and return the count.



Return Values:

v -- Output the count of selected contacts.

HRESULT _stdcall GetSelectedCompaniesCount([out, retval] int * v );

Reset the Contacts Buffer with selected contacts in the Companies List window and return the count of selected contacts.



Return Values:

v -- Output the count of selected contacts.

HRESULT _stdcall GetListedCompaniesCount([out, retval] int * v );

Reset the Contacts Buffer with listed contacts in the Companies List window and return the count of listed contacts.



Return Values:

v -- Output the count of listed contacts.

Search contacts

These functions may search contacts with a set of criteria, and reset the Contacts Buffer with the IDs of returned results.

HRESULT _stdcall FindName([in] BSTR n, [out, retval] VARIANT_BOOL * ID );

Search a contact by the full name, and reset the Contacts Buffer with an ID of the contact. The operation will search companies if the call is within a BeginCompanies/EndCompanies block, otherwise, search people.


n -- Full value of full name of the contact.

Return Values:

ID -- Return true if successful.

See Also:

BeginCompanies, EndCompanies

HRESULT _stdcall FindContactsByField([in] BSTR FieldName, [in] BSTR FieldValue, [out, retval] int * Count );

Search contacts with a pair of field name and field value, and reset the Contacts Buffer. The field name may be in the form of "SectionName\FieldName".


FieldName -- Dynamic field name of any section or a particular section. To search by a field name of a particular section, the field name is in the form of "SectionName\FieldName". For example, to search by the Phone fields of the Personal section, the FieldName is "Personal\Phone". The FieldName is case sensitive.

FieldValue -- Partial field value of a field, case-insensitive. For example, search by phone number "9987" may be matched with "99878903", "2399-8732" or "32339987".

Return Values:

Count -- The count of search results.


The ID of a contact might appear in the results more than once, if multiple fields of the contact match the search criteria. Because of the syntax of defining the section name, if you have field names or section names containing character "\", the search result might be confusing. Anyway, having a "\" in a field name is not recommended.

HRESULT _stdcall FindContactsByName([in] BSTR AName, [out, retval] int * Count );

Search by full name of contacts.


AName --Partial value of full name of contacts, case insensitive.

Return Values:

Count -- The count of the search results.


The results may be of people or companies.

HRESULT _stdcall FindContactsByPhone([in] BSTR Phone, [out, retval] int * Count );

Search contacts by a phone number. The operation will search all fields of action type "phone", therefore, fields like "Phone" and "Mobile" will be looked through.


Phone -- Partial phone number, case insensitive.

Return Values:

Count -- The count of the search results.


A contact might appear in the results more than once if multiple fields match the search criteria.

HRESULT _stdcall FindContactsByEmail([in] BSTR Email, [out, retval] int * Count );

Search contacts by Email address. The operation will search fields of action type "email", therefore, fields like "Email" and "Primary Email" will be taken care of.


Email -- Partial value of Email address.

Return Values:

Count -- The count of the search results.

HRESULT _stdcall FindContactsByDate([in] BSTR FieldName, [in] DATE DateBegin, [in] DATE DateEnd, [out, retval] int * Count );

Search contacts by a date field with value within a period.


FieldName -- Field name of a date field, such as "Birthday" or "Anniversary".

DateBegin -- Begin date of the period.

DateEnd -- End date of the period.

Return Values:

Count -- The count of the search results.

HRESULT _stdcall FindContactsByFieldType([in] BSTR FieldType, [in] BSTR FieldValue, [out, retval] int * Count );

Search contacts by fields of the same field type For example, search the "phone" type will eventually involve field "Phone", "Mobile" and "Fax" as both fields by default share the same field type "phone".


FieldType -- Field type of fields to search, such as "phone" and "bday". Case sensitive.

FieldValue -- Partial value of field values of contacts.

Return Values:

Count -- The count of the search results.

HRESULT _stdcall FindContactsByFieldAction([in] BSTR FieldAction, [in] BSTR FieldValue, [out, retval] int * Count );

Search contacts by fields of the same action type.


FieldAction -- Action type of fields to search, such as "phone" and "map". Case sensitive.

FieldValue -- Partial value of field values of contacts.

Return Values:

Count -- The count of the search results.

Manage Contacts Buffer and retrieve info

The functions manage the Contacts Buffer to reset or read some statuses.

HRESULT _stdcall GetIds([out, retval] BSTR * ids );

Return IDs of contacts in the Contacts Buffer.



Return Values:

ids -- A list of IDs of contacts, as a comma separated string.

HRESULT _stdcall LocatePeople([in] int Idx );

Change current item of the Contacts Buffer by changing current item index.


Idx -- New index value. The index is 0 base.


This function works for both personal contacts and organizational contacts, despite of the function name.

HRESULT _stdcall GetContactID([in] int Idx, [out, retval] int * ID );

Get the contact ID of a contact in the buffer by the item index.


Idx -- Item index value. The index is 0 base.

Return Values:

ID -- Contact ID.

Access contacts in Contacts Buffer

Read and write upon current item of contacts in the Buffer.

HRESULT _stdcall GetName([out, retval] BSTR * v );

Get the full name of current item of contacts in the Buffer.



Return Values:

v -- Full name of current item of contacts.

HRESULT _stdcall BeginCompanies( void );

Signal that the following functions will be for handling organizational contacts: CreateContact, FindName, BeginCategories, EndCategries. Other functions can work for both personal contacts and organizational contacts.



Return Values:


HRESULT _stdcall EndCompanies( void );

Mark the end of a section for organizational contacts.



Return Values:


HRESULT _stdcall GetField([in] BSTR Field, [out, retval] BSTR * v );

Get field value.


Field -- Field name of any section or a particular section. To access a field of a particular section, the search criteria is like "SectionName\FieldName".

Return Values:

v -- Field value. If not found, the value will be empty.


If there are multiple fields with the same field name, only the value of the first one found will be return.

HRESULT _stdcall SetField([in] BSTR FieldName, [in] BSTR FieldValue );

Set a field value of current item of contacts in the Buffer. The form of FieldName must be "SectionName\FieldName". If the field does not exist, the field will be created. If there are multiple fields with the same field name in the section, the first one found will be updated.


FieldName -- Field name of the field to set.

Return Values:

FieldValue -- Field value of the field to set.

HRESULT _stdcall GetNotes([out, retval] BSTR * v );

Get the value of the notes field of the primary section.



Return Values:

v -- Field value of the notes field.

HRESULT _stdcall SetNotes([in] BSTR v );

Set the value of the notes field of the primary section.


v -- Value of the notes field to set.

Return Values:


HRESULT _stdcall CreateContact([in] BSTR n, [out, retval] int * r );

Create a contact, and reset the Contacts buffer. If successful, the contact will become the current item in the Contacts Buffer.


n -- Full name of new contact.

Return Values:

r -- 0, if successful; 1, if contact with the same name exist; 2, fail.


By default, this function will create a person, and Open Contacts will analyze the full name into surname, given name and middle name. To create a company, contain the call inside in a BeginCompanies/EndCompanies block.

Visual control

Control some visual behaviors of Open Contacts

HRESULT _stdcall ShowOC( void );

Display Open Contacts.

HRESULT _stdcall RestoreOC( void );

Restore Open Contacts if minimized, and bring it to the front.

HRESULT _stdcall MinimizeOC( void );

Minimize Open Contacts.

HRESULT _stdcall RefreshOCNav( void );

Refresh the initial grids and the contact lists. This function is generally called after updating the database.

HRESULT _stdcall ClearPeopleEdit( void );

Clear the Edit Person window for new record.

HRESULT _stdcall ClearCompanyEdit( void );

Clear the Edit Company window for new record.

HRESULT _stdcall ShowContact([in] int Idx );

Show a contact of the Contacts Buffer, either in the Edit Person window or the Edit Company window.


Idx -- Item index of the contact.

Return Values:


HRESULT _stdcall ViewContact([in] int ID );

Show a contact , either in the Edit Person window or the Edit Company window.


ID -- Contact ID of the contact.

Return Values:


HRESULT _stdcall QuickViewContact([in] int ID );

Show a contact in the Quick View window.


ID -- Contact ID.

Return Values:


HRESULT _stdcall SearchBirthdays([in] BSTR command, [out, retval] int * r );

Search contacts by birthday within a time frame. The birthday field is defined in the General tab of the Options. The call will bring up the Search Birthday window and list the results.


command -- Command that represents a time frame. Possible values are thismonth, nextmonth, thisweek, nextweek, today, and tomorrow.

Return Values:

r -- The count of the search results.

HRESULT _stdcall SearchBirthdaysBetween([in] int m1, [in] int d1, [in] int m2, [in] int d2, [out, retval] int * r );

Search contacts by birthday within a period of any year.

The birthday field is defined in the General tab of the Options. The call will bring up the Search Birthday window and list the results.


m1 -- Start month.

d1 -- Day of the start month.

m2 -- End month.

d2 -- Day of the end month.

Return Values:

r -- The count of the search results.

Search and get info directly

Search contacts and return results directly without UI change.

HRESULT _stdcall GetSelectedContactsEmails([out, retval] BSTR * v );

Get Email addresses of selected contacts in a contact list window such as the People List window and the Search window.



Return Values:

A list of Email addresses separated by semicolon, presented in form "Contact Name".


If a contact has multiple Email addresses, the primary Email address of field type "aemail", or the first one found if no primary Email address is defined, will be returned.

HRESULT _stdcall GetListedContactsEmails([out, retval] BSTR * v );

Get Email addresses of listed contacts in a contact list window such as the People List window and the Search window.



Return Values:

A list of Email addresses separated by semicolon, presented in form "Contact Name".


Get some statistical data and settings of Open Contacts.

HRESULT _stdcall GetPredefinedFields([out, retval] BSTR * v );

Get predefined field names in a comma separated string.

HRESULT _stdcall GetExistingFields([out, retval] BSTR * v );

Get distinguish field names of all contacts.

HRESULT _stdcall GetPredefinedSectionNames([out, retval] BSTR * v );

Get names of predefined sections.

HRESULT _stdcall GetExistingSectionNames([out, retval] BSTR * v );

Get distinguish section names of all contacts.


HRESULT _stdcall GetContactHTML([in] int ID, [out, retval] BSTR * html );

Return contact info in HTML format. The HTML content is generated though rendering the XML of the contacts with the default XSLT used in the Quick View window.


ID -- Contact ID.

Return Values:

html -- HTML content.

HRESULT _stdcall DoAction([in] BSTR Action, [in] BSTR Value );

Call a built-in function of action of Open Contacts. Each action type of dynamic fields is generally associated with a built-in function or program which can be triggered in Open Contacts by pressing F9. This function make Open Contacts become an action proxy.


Action -- Action type, case sensitive.

Value -- Value which the action will act on.

Return Values:


HRESULT _stdcall BeginCategories( void );

Popup the Define Categories window, and all following new contacts will be assigned checked categories.


Within a BeginCompanies/EndCompanies, the Define Categories window brings up the category tree for companies.

HRESULT _stdcall Test( void );

A dummy function to test the existence of the COM server.

Purposing COM API functions

To better communicate with other programs and to make to programming job for client programs easier, some new API functions may will be published in the future.

  1. Return XML of a contact by contact ID. This will be handy the render the contact info into other formats.
  2. Return XML of contacts in the Contacts Buffer.
  3. Return vCard stream of contacts in the Contacts Buffer.
  4. Event: When a contact is added, return the contact ID.
  5. Event: When a contact is deleted, return the contact ID.
  6. Interface for address: is composed of Street, City, State and Geo etc, and section name as well.
  7. Return the address of a section of a contact.
  8. Return the addresses of a contact.
  9. Interface of settings: While Open Contacts stored almost all settings in the address book database, the interface provides a subset of the settings.

Monday, May 28, 2007

Open Contacts and FOAF

Open Contacts and FOAF

It is assumed you have some basic knowledge of following services:

  • Social networking web services of MySpace and Linkedln.
  • Distributed social networking like FOAF and Microformats.

Please also read the following web pages

RELATIONSHIP: A vocabulary for describing relationships between people

XFN 1.1 relationships meta data profile

The Friend of a Friend (FOAF) project

FOAF Vocabulary Specification 0.9

Is Web 2.0 Address Book a silver bullet?

Open Contacts and distributed social networking, Part 1

Open Contacts and distributed social networking, Part 2

Open Contacts natively supports XML. Contact details, categories and relationships can all be exported into a single XML file, thus, such info can be converted into other formats using XSL files or simple programs. So, FOAF or Microformats .....

Open Contacts provides explicit functions of managing relationships between your contacts. Do you see how you are managing the relationships between you and your contacts?

Yes, the category system. Though a category system is not exclusively designed for categorizing contacts of different relationships, however, it is natural that you create a few category nodes like "Friend", "Classmate" and "Relative" etc along with other categories like "Government", "Business" etc.

It is very straightforward to map the "Classmate" category to the "Classmate" relationship. However, you might have a few sub-categories to store "Primary School", "High School" and "University" etc. It is neither conventional nor necessary to present such level of info to social networking, because generally you just need to mark relationship "Classmate". The solution is to mark these categories with property "Classmate". Thus, you may have multiple categories sharing the same relationship property.

In version 4.x, when editing categories of People, you may assign some categories with relationship properties. Open Contacts will show a sibling top category "Relationship", below which there's one level of categories such as "Classmate", "Sibling", "Co-worker" and "Friend" etc., which are created automatically according to what relationship properties were assigned to categories under top category "All". When clicking on property category "Classmate", all contacts under categories with property "Classmate" will be listed.

To improve the visual effects of managing relationships, each property of relationship is associated with a background color which will apply with relevant categories.

As you have seen the example of RDF files of FOAF, it is straightforward to translate Open Contacts' XML into RDF of FOAF. In addition, it should be also easy to convert RDF of FOAF to Open Contacts' XML which can be imported into Open Contacts. Therefore, Open Contacts and FOAF can support each other.

Can you see the protentials?

Tuesday, May 22, 2007

Multiple databases for only you or multiple users

Your address book consists of the following components:

Core data -- A database file with extension name "GDB" contain essential part of your address book, including contact names, sections, fields, relationships and categories as well as almost all settings.

External files -- While the data fields can store names of external resources like web page addresses and file names, the files pointed by the file names are general stored in local computers or local area network. By default, file names without file path point to files stored in the Files directory of the user directory.

Template files -- While the whole design of Open Contact is very flexible for all users, some users with advanced knowledge of XML/XSL/HTML can modify some template files used by Open Contacts. Please read XML Explained for more details.

The built-in backup function backups the core database only. If you want to backup all components of your address book, you may just simply close the program, and copy all files of the user directory to an external storage.

Sometimes you might want an address book database for all your close contacts, and the other for business customers only. Or, there might be a few users sharing the same PC, each of them may want a personal database located in each personal folder under the "Documents and Settings" folder.

To support multiple databases, technically there can be a lot solutions. Because Open Contacts supports green mode which does not write things into Windows registry, we decided to use the Start-in folder as the location of the data files.

The operations described below might require knowledge of computer literate. If you are uncertain what to do, please ask your close contacts who understand system administration for assistant.

A windows program shortcut includes two paths: one for the target folder where the executable file is located, and the other for the "Start-in" folder where the program is started. If the "Start-in" folder is not defined, the folder is the same as the target folder. For example, checking the properties of the Open Contacts shortcut, you will see the target folder is inside "C:\Program Files\..." and the "Start-in" folder is inside "C:\Documents and Settings\All Users\Documents\Shared Contacts" if you installed for all users.

Open Contacts will locate data files in the "Start-in" folder by default at startup. Open Contacts will first read the "main.ini" file in the "Start-in" folder for the location of the database, then read the database. The other companion data files are all in the "start-in" folder by default.

In the "main.ini" file, if the database name is defined but without file path, the location of the file should be in the Data folder of the "Start-in" folder. So, by default, all data files and templates are located in the "Start-in" folder.

To support multiple personalities of one user or multiple users, please follow the steps below:

1. Copy an existing personal folder to specific folder as a new personal folder

From the "Start-in" folder of an existing shortcut, you locate an existing personal folder. Copy all files to specific folder which will become a new personal folder.

2. Copy a blank database to the data folder of the new personal folder to overwrite the database file copied from the source folder.

In the target folder, there's a blank database file "default.gdb". Copy this file to the data folder of the new personal folder to overwrite existing one. If you had changed the name of the database file or the settings of the INI file manually, you might need to adjust the operation details of this step.

3. Create a new program shortcut with the "Start-in" folder pointing to the personal folder.

If you as system administrator is going to create a new personal folder for another user and the PC is configured using LUA concepts, you might want to create the new copy inside the personal profile area and create the shortcuts there as well.

Thursday, May 17, 2007

Versions Explained

Open Contacts has a formalised version number structure based around the NumVersion struct, which specifies a one- or two-digit major version, a one-digit minor version, a one-digit release version, and and multi-digit build number.

A major version is assiciated with more than 10 significant improved features, a minor  version indicate one or more features added, and a minor version is with one or more bug fixes. The build number is the counter of compiler build on the program.

Sunday, April 29, 2007

How Open Contacts update an existing contact when importing

How Open Contacts update an existing contact when importing

A contact is uniquely identified by the full name, surname, given name and middle name. When importing a contact with the same name existing in the database, OC will prompt the user for action. If the user choose to update existing record, OC will try to merge:
1. If an imported field (combination of section name and field name) does not exist, the field will be added.
2. If an imported field does exist, the field will be updated.

For example, Andy Smith in the database has
Personal/Phone = 4324324324

And the imported Andy Smith has
Personal/Phone =1111111
Personal/Phone =222222
Personal/Phone =333333

After importing, the existing phone field will be updated, and 2 more are added, so the personal section will have 3 phone fields.

Thursday, March 29, 2007

How will you choose a replacement of address book program?

You have been using Email for years, and almost all Email programs came with an address book module. Are you satisfied with such container of contact info? Probably not. This is why you have been searching for a better solution. While there are hundreds of solutions around, based on Web or desktop, you might need to ask yourself a few questions before making a choice.

  1. Do you have more than one Email accounts? Do you use different Email client programs? For example, Mozilla Thunderbird, MS Outlook and Hotmail.
  2. Do you sometimes want to store some contact info that could hardly be stored in designed fields of the address book?
  3. Do you sometimes use computer to make telephone calls and Skype calls?
  4. Do you need to print mailing labels?
  5. Do you have some organizational contacts to record?
  6. Do you want to sometimes record multiple notes for a contact?
  7. Do you want to have a multi-level category system to categorize contacts?
  8. Do you want to run the address book program on an external portable drive such as a flash disk or iPod?
  9. Do you want to run the address book program on LAN to share the address books with staffs in the same office?
  10. Do you want to outline the relationships between contacts?
  11. Do you exchange contact info with other people?
  12. Do you often need to do copy/paste in order to copy contact info from/to other documents?

If you have 3 affirmative answers to the questions above, did you find any program that adapted such needs?

If not, then you might find the answers interesting made by Open Contacts.

  1. Open Contacts is not an Email program and it has good interactions with different Email clients. It can natively interact with MS Outlook through Office COM, Mozilla Thunderbird and other conventional mail programs though MAPI, Portable Thunderbird through commandline, Lotus through Windows Shell, and web mail through copy/paste.
  2. Open Contacts have almost all fields created dynamically, so that you can insert unlimited field/value pairs.
  3. Open Contacts interacts natively with Windows Telephony (Dialer) and Skype. And you can seamlessly integrate telephony and skype if desired.
  4. Open Contacts provides built-in functions of printing selected info of selected contacts in a compact format, thus you can easily have a tidy and handy address book. In addition, with exported CSV/Excel files, you can print rich formats of mailing label through dedicated label printing programs.
  5. Designed with separation of people contacts and organizational contacts, Open Contacts provide associations between people and companies. So you can easy find people working in the same organization. In addition, you can record the relationships between one person and multiple organizations.
  6. Almost all existing address programs provide only one Notes field, Open Contacts provide unlimited notes besides the primary one.
  7. While grouping contacts is the basic feature of almost all existing address book programs, Open Contacts provide multi-level categories.
  8. Open Contacts was designed to be running without installation, thus it can run on an external portable drive such as a flash disk plugged into any Windows workstation (Windows 2000 or above).
  9. Open Contacts was designed to be running as a client/server application talking to a standalone Firebird database server.
  10. You can create relationship links between people and companies.
  11. CSV, vCard, LDIF and XML.
  12. Open Contacts provides a set of copy/paste functions for you to exchange info between Open Contacts and other documents through Windows clipboard.

Saturday, March 24, 2007

Plan B of Contact Management

Web base contact management has been becoming more and more popular in last few years. The advantages are obvious. I am not going to discuss them here.

Though there are still some criticisms against it, saying privacy and reliability etc., however, web base contact management is still the most attractive solution for metro people who "always" have reliable and constant internet connections.

However, small or large disasters do strikes occasionally. Plan B. Do you have a handy plan B for contact management?

Some prefer the PC desktop/notebook as a hub for all contact info and sync selected data to other platforms/programs. They won't be effected if the internet connection to the Web base contact management site is down. You still can access phone numbers and ring people. But when power is down, computer is useless. With laptop and UPS, things will become just a bit better.

Mobile phone / PDA is handy , though they are not good candidates to be hub of contact info. I am sure that everyone will naturally store emergency numbers and frequently used numbers in phone. Yes, you have already got yourself a plan B.

When you are busy having phone talks during power outage, the battery of your mobile phone become flat. You then can not access the address book on the mobile phone in order to ring through land line which is generally not effected by power outage. So, a low tech solution will come to rescue, if you have implemented such solution: printing those contact phone numbers on paper, one copy at home, and another copy in your wallet.

Friday, March 23, 2007

Was Open Contacts designed for your use cases?

Open Contacts is an address book, or contact management program. However, it is not a CRM or PIM program.

If you find existing address book / PIM programs that your are using can not fit your needs, Open Contacts is a much more powerful candidate for you to consider. However, if you want event tracking, sale/marketing activities as well as billing etc., then Open Contacts is not for you. Obviously you should then eyes on CRM programs. Open Contacts is positioned as a bridge between conventional address book program and CRM program.

One of the features that make Open Contacts stood out of existing address book programs is its great extendibility to other programs running on desktop or the web. Though Open Contacts is not a PIM program, however, it is relatively easy to construct a PIM utility using existing programs. Please read
Build your own portable PIM with Open Contacts and other portable programs
for details.

Wednesday, March 14, 2007

Open Letter to Users of Open Contacts

Hi All

I am writing to you to discuss the development path of Open Contacts (OC).

When OC is distributed as freeware, we have developed a few commercial extensions. We provide this piece of software sitting between conventional address book programs and CRM programs. After all, we do not intend to lock you, as we do provide a few ways of exporting data which can export almost everything you have inputted to external files which can be imported to other programs. In the future when you want to move to a more comprehensive platform of software application, data will be easily transfered.

As you might agree, contact management is not a single feature, and should rather work along side with other functions, such as a CRM system, an email client or a calendar program.

Up the now the version of Open Contacts has reached to v3.9.5, and we believe that Open Contacts provides richest features in the market of address book programs. Most planned key features were implemented, thus the paces of upgrading will be slowing down. We would like to take some time to review our development, and think about the paths and the focus.

We are thinking of the following options of new features and extensions, and would like your opinions about them. Essentially, it is not about new features, but what you need and what you will need:

1 Evolve to PIM

We were devoted to the best of address book programs running on PC desktop, while almost existing similar products at most just cloned the Windows Address Book (from Outlook Express and MS Outlook) and could never exceed the features of the WAB. However, we thought that many of existing schedule programs like MS Outlook, Mozilla Sunbird and Google Calendar are very adequate, as the requirements for scheduling are very common and stable. We would just try to provide convenient shortcuts and interactions between Open Contacts and these calendar programs. In short, it is unlikely that we will create another PIM program under current circumstance.

2 Provide better and better connections to other calendar programs

Yes. This have been what we always intent to do. The candidates are: MS Outlook, Mozilla Thunderbird, Mozilla Sundbird, Google Calendar, Yahoo Calendar. Of course, the development of such interactions will very much depend on many factors: the willingness of the vendors of these programs and websites. In addition, the evolving of Web 2.0 may play a part.

3 Provide pseudo remote access to address book database

For users who need to access the same set of contact info at home and at work, there existing a few ways: 1. Use OC in a portable device. 2. Use a remote PC program to access OC remotely. We are thinking the third way: Let a user to download the database from a remote host (likely managed by the user), after editing, then upload back to the remote host. The following protocols will be supported: FTP, IMAP, HTTP and others.

4 Support schemes of distributed social networking

This subject is the key issue we would like to discuss with you.

About Social Networking

Have you heard of or used the following web sites of social networking? Linkedln, MySpace, orkut and Bebo etc. There are many many, as you can see from this list of social networking.

Are we going to provide you yet another website of social networking? The simple answer is No, as we hated providing you yet another address book program. Otherwise, you might have picked yet another address book program rather than Open Contacts. However, we do believe that Open Contacts is reaching to an edge of providing an alternative solution of social networking, taking care of some of your concerns about social networking websites:

1. Privacy

2. Locking

3. Troubles of subscribing to multiple web sites

We have done some preliminary researches on these issues, and would like to share some findings with you. If you can raise your opinions after reading these materials, we will appreciate.

We would like to provide you a list of blogs we had visited. We did read these blogs and theirs follow-up comments carefully. And we would like you to make your own comments to us, and to these blogs as well. and comments by Konstantin Guericke

Hopefully you will find some useful info or inspiration about what is happening in the Web.

We have a replicated copy of this letter at blogger, please feel free to raise comments following the blog, or just drop us an Email.


Fonlow Support

Tuesday, March 13, 2007

Letters about Misc.

Lee Stoddard wrote:

Great program and have been using it for close to a year. Just came across a need to enter a suffix after the last name. ie Jr Sr I see no option or drop down to add this to the display. Currently have added as Lastname(Jr) but doesn't seem proper as I have to edit when sending an email or creating labels. Any suggestions or maybe an enhancement in a future release.

Lee Stoddard

Just create a new field called suffix, probably make this field be a predefined one. When making labels, export this field as well.

Lee Stoddard wrote:
Yes, I can add a new field but this can only be added in a section. I would like it to be added along with the name and surname locations so it can be displayed in the name list. I added it manually in the name field and then it puts the last name in the middle name, and the suffix as the surname. I can then clear the middle name and add the last name and suffix manually as the surname. I just thought it might be better to have an option to show this separate field somehow in the name display as many people have a suffix associated with their legal name. Ie Jr Sr I II III . The Title field I expect is used for Mr Ms and would show at the beginning of the name. The suffix shows after and might possibly also be used for degrees such as MD etc. Using my work around I might run out of field length on the surname in some cases. We don't appear to have any options to make changes in this area. In any case this works for now and is still the best software for this applications I have found.

I understand what you want. However, we had considered this before day 1, and decided to have suffix if desired be dynamic field, regarding to the balance with many other factors.

Ed Philpott wrote:
I want to import several data files into OC and I want them to be assigned to a particular Category. Is there a way to assign a Category during the Import function? Perhaps this could be part of the template.

What you requested was there since day 1, and this had nothing to do with a template.

Open to the Future

The reasons why we selected the name "Open Contacts" for our product was because of the philosophy behind the development of the product:

  • Open to the future. More fields will be added by us or by you, as you might have other info to input in the future. The program will adapt new data fields, and new ways of communication.
  • Open to other applications. The program will interact with other desktop applications and Web applications, through inbound and outbound interfaces.
  • Open to users' choices of freedom. We may or may not provide all-in-one solution in the future, however, we respect your choice of other complementary applications, and the freedom to moving away to other higher end programs. We don't lock you and We are open to your choices.

Providing dynamic fields as the building block of your dynamic contact info is one of distinct features of Open Contacts. With the dynamic action button upon highlighted data field, new ways of interacting with other programs can be introduced without making the user interfaces more complicated.

As described in the product home page, Open Contacts can import data from large varieties of data sources, and interact with different Email programs, Skype and Google Maps etc. In addition, the program provides COM interfaces for other programs to cooperate. Birthday Reminder is a good example.

Open Contacts can export selected contacts to other format: simple text, XML, HTML, vCard and LDIF, preserving most contact info. Only those data fields not supported in other formats will not be used. Thus, you will be free to sync data to other programs/platforms, or move your whole contact management to a highlander program you desire in the future.

Sunday, January 21, 2007



Many users are concerned by the security of address book data. While security is essential to privacy of you and your contacts, it is more practical for you to understand what security level you need, and what resources available for security, while there are many security solutions around.

An SQL database can be secured when authentication mechanism is sound and the database files are kept in a safe place. If the files got stolen, the authentication mechanism will be lost. While it is not rare to encrypt data in a database, however, this will bring penalty to performance, and queries will be made difficult.

Data security is a big topic not likely to be discussed here in detail. Though Open Contacts does not provide built-in security, however, it is easy to use existing resources to introduce certain level of security to Open Contacts.

If you use Open Contacts in LAN environment, you may put the database file in a secured server. Client machines should not be able to access the database file directly, but through Firebird database server. Please work with your system administrator to improve data security. If the contact data contain linked files, the directories of these files should allow client machines to access.

If you use Open Contacts in desktop mode, you has better to run your account in LUA mode, and put the database files into a folder exclusively accessed by your account.

If you use Open Contacts in an external drive, you many consider to use an open source freeware program called TrueCrypt located at TrueCrypt also support green installation on an external drive. You may then put Open Contacts and related files to the encrypted storage managed by TrueCrypt. Please study the TrueCrypt website for more details.

Please note, we do not provide technical supports to general questions of Windows, LUA, encryption and TrueCrypt etc.

Letters about Security

Do you plan to add AES grade security to your contacts program?

Thanks Jim

As you might be aware, encryption inside database is not desired regarding to performance, especially about searching data.

From comprehensive point of view, you also need to protect other data. Are you going to ask all vendors of programs of these data to add encryption to these programs? Obviously not, an quick and easy and cheap solution is to use Truecrypt, which is freeware, easy to use. I used it in my usb memory stick. Truecrypt uses AES, and can provide a secure storage for all your sensitive data and programs. Using Windows LUA settings and TrueCrypt, almost all your security issues will be resolved. Please search Truecrypt for details.

Sunday, January 07, 2007

Letters about Importing

When I try to import my MS Outlook contacts to Open Contacts it gives me the following message: EIntcastError – Interface not supported While importing from outlook

How do I solve this problem and import my contacts?

You had sub-groups in the contact list. Please download the latest version 3.7.6 or above to resolve.

Do you have any solutions / suggestions for sharing the contact data over the net? I like to synchronize my info at one source and have it accessible from any computer (Google contacts or Yahoo Addressbook for example).


Hi Scott

Currently you may use CSV for importing/exporting data with Google contacts and Yahoo addressbook, while we do have plan to sync. with them, however, it is up to them to decide whether to provide on-line sync interfaces with Open Contacts. Open Contacts does support vCard and SyncML for synchronizing with other address books and devices, so in long run, better supports for sync can be done, but not with Fonlow alone. As a customer, you may suggest Google and Yahoo to provide better sync interfaces.

I tried to make more sections than whats showing in the window but no links appears..

Hi Lars

OK. I just uploaded v3.7.3.390, which fixed some issues found by you. I also improve the importing of vCard, so the fields created from vCard and other data sources will also be translated as well. Please find the attached PO file which contain a bit more new strings, mostly for vCard importing. You may merge this PO file with your translated PO file, just make sure you backup the translated one first.

In addition,

In folder "Templates", there is file "ExportVCard.xml" for exporting records to vCard files. This XML file defines the mapping from Open Contact data fields to vCard data fields. The translation is straightforward generally, and you should pay more attention to these two lines:

<line type="a" s="Personal" a="map" vch="ADR;HOME" />
<line type="a" s="Work" a="map" vch="ADR;WORK" />

You may translate the section name, but leave a="map" alone. Open Contacts supports single-line address and multi-line address. So Open Contacts will just organize address fields of the "map" action type.


Very good application! Thanks for sharing it!

There is an useful option in the app Open Contacts v3.7.3.377

Option: Import/Export -> Exporting to vCard -> Multiple contacts in one vCard file

Possible Bug: The app freezes when importing a vCard file with multiple contacts in one vCard file.

Can you verify it?
Is it easy to implement/repair?



Though vCard standard supports multiple vCard in one file, so far most main stream PIM programs support one vcard per file, as mentioned in the hint.

You are not suppose to import vCard files exported by OC. Nevertheless, I will make OC to abort when getting such vCard file safely.

John Lloyd Davies wrote:

I love the idea of your program but am having difficulty in importing contact information from excel. Do I import persons first then re-import companies?

The links to my email client and skype are wonderful but I need my import to work.
What detailed information would you like? I am running XP Home, Office 2003.
If your contacts are in an Excel files, save them to CSV first. The create a mapping file in XML to map CSV fields to Open Contacts fields, then import the CSV with the mapping. Please read the manual for detail. Though the job is not easy, this is just one-off.

Letters about Importing CSV

That’s just the thing though—the preview shows it as ok but the import breaks it. I also tried reimporting it with just my name written over and over, plain text- quite a simple process with no special characters. It gave an error, and now in the notes field it shows:

azim azim azim azim azim azim azim azim azim azim azim azim azim azim azim azim a5D25F in module 'OpenContacts.exe'. Read of address 00000000

It seems that there is some buffer overflow when it does the actual import, as it seems to “break” and truncate the text at the same point no matter what the text is—about 80-85 characters into the text.

That's right, around 80 characters for each field.

As I said, CSV is not solid. MS Excel can not handle your csv file well. The thing I can do is to make the error message more meaningful.

If you want to import legacy data, better to export them to XML file of Open Contacts' schema.

I am trying to import information from an Excel spreadsheet into Open Contacts. I have the Excel spreadsheet saved in CSV format. I go through the process to import it into Open Contacts. I have a template, I import the CSV file, and then when I actually try to import the data, I have a problem. I can only import data from the very first row from the Excel spreadsheet – it will not let me select any other row. When I do try to pick another line, it diverts back to the first line and tells me that I have a duplicate record, and when I tell it to skip and continue, nothing happens. I still cannot pick another row.

I think your program is great – and it would make my life so much easier if I could import from Excel.

Help! Tell me what I need to do!!


Ellen McWhirter

So far you have done well following the manual. However, there are some limitation of importing, comparing with other advanced database import utilities.
1. Import only all data in the CSV file. You can't pick any line, so you have better tailor your csv files first.
2. The csv data shown in the Import window is for your reference to make some temp changes. The UI is not for you to pick any line to import

Don't worry that the template is not yet perfect, you can undo the last import as long as you keep the import window open.

Tomas D. wrote:
Thank you very much the answer - I managed to define the template and
export the data into CSV file (though all the data conected with the
particular contact are just in one box...I am not quite sure if that
is the proper result) but I still encounter the problem with exporting
the data into excel file - while doing that I first open the tempalte
XML file and then when trying to save the Excel file the error warning

"default.xlt could not be found. Check the spelling of the file name,
and verify that file location is correct.
If you are trying to open the file from your list of most recently
used files on the File menu, make sure that the file has not been
renamed, moved or deleted"

I do not quite understand this message because I creating the Excel
file for data export for the first time, so there should not be any
such message.
I checked the manual but could not find any clue.

Thank you very much for your help

2006/9/2, Support :
Tomas D. wrote:
> Dear Madam or Sir,
> I am very satisfied with the Open Contacts software, but I do
> experience one very serious problem. When I want to export the contact
> data into Excel (REPORTS-EXPORT TO CV/EXCEL-TO EXCEL - XML File with
> export template) at the end of this procedure I always encounter the
> Error Message saying that:
> Object: TactionMainMenuBar EdomParseError The system cannot locate the
> object specified. Line 0
> In this way I cannot export and subsequently store my contact data. I
> will be very grateful whether you could advice me in which way I could
> solve the problem.
> Thank you very much
> T.Danhel
The XML file is a template for mapping Open Contacts fields to CSV/Excel
fields you desired. After you design the template, you can export
selected contacts to CSV files. Please read the user manual for details.

Hi Tomas

Yes, creating a mapping is not an easy job. Fortunately this is one time job.

Regarding to Exporting to Excel, this is a bug. We will fix it soon. And, actually you may use Exporting to CSV, very much the same effect. Most data management programs can handle CSV.

You can export multiple sections of each contact. If you keep consistent naming convention, the exporting should be able to transferring almost all data.

As Open Contacts gives you much flexibility in organizing data, the sack back is that I can not give you a unified answer for exporting. You have to try a few times to get clues, and the learning curve is worthy. Have fun.

Dear Sirs,

I thoroughlly followed your import instructions to import a CSV file from "LotusAgenda" [or something...] but after defining the XML template and following the 3 steps, it imports NOTHING although it seems to have parsed the file, as you can see in the attached "status" screenshot. And even pressing CLOSE button does not do anything.

Importing from CSV to any other program is always a very technical issue. Apparently the mapping definition in the XML failed to impress the import engine. If you find it is still too difficult to make a proper mapping, you might consider to export the data into vCard files first, then import them.