Delphi as a product provides easy integration with various relational databases for storing your data but there are other alternatives.
Innova Solutions generally chooses not to use a standard relational database but persists business objects in an “Object” database implementation.
As this is not a Relational Database you cannot use SQL searches to get data – the ‘Object Database’ functions mean that your “Select” statements are now standard Delphi. The database effectively holds a representation of your in-memory Business object(s) and you access them by
- Using their primary Index (for object cross referencing),
- Encapsulating them in another object or
- An index string you have defined
The database “Table Definitions” exist as a cascade of code via inherited load and store methods which preserve the OO structure of the data. Similarly the “indexes” are defined in the descendant object of the database file. At Innova Solutions this has lead to massive code reuse between projects as all our projects seem to require us for example to record people with a “Name” and probably an “Address”. All the searching and tracking of these are common and we simply add the attributes for the particular application.
In this Object database each object is persisted as a stream or Blob in the file. The database engine takes care of allocating the space and maintaining indexing, etc. but the individual object code is responsible for its stream representation and its own recovery of data from the stream. All objects must inherit from the base object which imposes some restrictions on the code and provides functions to assist in the stream persistence.
Innova Solutions now offers a set of DCUs to Delphi developers which implement the Db logic within the application.
A GitHub Repository provides DCUs for various Delphi Versions,
Alternatively an installer version of all dcus remains available from
http://docs.innovasolutions.com.au/docs/ObjectDbDCU/Object Framework DCU Setup.exe
Delphi 10.1 Berlin DCUs
In December 2016 the DCUs for Berlin were finally added. The migration to Berlin had been stalled while the significant upgrade to allow NextGen support was implemented and tested.