Seit einer Weile ist das Objektframework
Instant Objects von Seleqt als Open Source freigegeben.
Statt direkt mit einer Datenbank zu kommunizieren kann man nun mit Objekten arbeiten und diese auch an datensensitive Steuerelemente binden. Hierfür gibt es einen Selektor der Objekte aus der Datenbank abrufen kann. Es wird hierfür eine
SQL ähnliche Syntax inkl. Parameter verwendet. Man kann z.b. mit
SQL-Code:
select KundenNr, Name
from TKunde
where KundenNr = :kundennr
ein Kundenobjekt aus der Datenbank abrufen. Statt Tabellen wird halt der Klassenname verwendet. Einige Sprachelemente sind leider noch nicht vorhanden, lassen sich aber leicht implementieren.
Die Definition der Objekte kann entweder direkt im Code oder mit dem Model Explorer, der in die Delphi
IDE eingebunden ist, durchgeführt werden. Objektvererbung wird ebenso unterstützt wie eingebettete Objekte und Referenzen. Eingebettete Objekte werden zum Teil des Objekts, so kann man z.b. in ein Kundenobjekt ein Adressobjekt einbetten. Der Zugriff ist dann nur über das Kundenobjekt möglich. Referenzen dagegen werden in eigenen Tabellen gespeichert, so dass auf diese auch direkt zugegriffen werden kann. Sowohl die eingebetteten Objekte als auch die Referenzen können als Container definiert werden, so dass beliebig viele Referenzen oder eingebettete Objekte innerhalb des Objekts enthalten sein können.
Neben dem Selektor gibt es auch einen Exposer der den Zugriff auf Objekte in einem Container, wie z.b. TObjectList ermöglicht. Der Zugriff erfolgt wie in einem Dataset über Rows und Felder.
Die physische Verbindung des Frameworks zur Datenbank findet über Konnektoren statt, derzeit gibt es diese für dbExpress,
BDE,
ADO und FlashFiler. Eigene Konnektoren können selber entwickelt werden. Per Knopfdruck werden die entsprechenden Tabellen in der Datenbank generiert. Bei Modelländerungen sollte man aber darauf achten das vorhandene Tabellen in der Datenbank gnadenlos gelöscht werden, da das Framework keine ALTER TABLE Anweisungen verwendet sondern ein simples DROP TABLE und CREATE TABLE. In einer der nächsten Versionen wird sich das hoffentlich ändern.
Ein erster Test im Rahmen eines kleineren Projekts sieht schon vielversprechend aus. Auf der Sourceforge Projektseite gibt es auch ein Einführungsvideo dazu.
Gruß,
Marcel