I am not using an "exotic" database but MySQL.
Exotic for me...
I am rather sure that FixContactsTable is quite obsolete in most cases. Because the tables created since the zeos datastore is existing very probably have the fields of the Lazarus version (FixContactsTable converts the Contacts table from fields used in the old Delphi version to the fields used now in the Lazarus version).
I don't understand why it is executed without a version check. Now I added whether a field of the Lazarus version already exists, and in this case, the procedure FixContactsTable is not entered at all.
Please test the development version on Lazarus CCR (
https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/tvplanit/), or replace the "if FConnection.Connected and TablesExist" block in procedure TVpZeosDatastore.SetConnected, unit VpZeosDS, by the following lines
procedure TVpZeosDatastore.SetConnected
...
begin
...
if FConnection.Connected and TablesExist then begin
FContactsTable.Open;
// If field "Department" does not exist then it is an old table and must be reworked.
if ContactsTable.Fields.FindField('Department') = nil then
begin
FixContactsTable;
FContactsTable.Open;
end;
FEventsTable.Open;
FResourceTable.Open;
FTasksTable.Open;
canLoad := true;
end;
...