Blog
All Blog Posts | Next Post | Previous Post
What is TMS Aurelius?
Friday, November 18, 2011
I've been working with Delphi and databases for years already (actually I'm this close to say "for "decades" - in plural).In database programming we all typically do the same: create SQL statements, execute it in the database and retrieve results back, using a TDataset descendant object which we use to iterate through data.
I guess that just like most of you who work regularly with databases, we've all used or written at some point small, medium-size "frameworks" to make these tasks a little more simple. Functions that build the SQL statement automatically based on some parameters, client datasets that build update statements, data dictionaries, etc.. In the past months though, I have switched several large projects including projects of customers to a new framework, built from the ground up.
It's basically something that prevents you from writing code like this:
Query1.Sql.Text := 'SELECT I.ID AS INVOICE_ID, I.INVOICE_TYPE, I.INVOICE_NO, I.ISSUE_DATE, I.PRINT_DATE, ' + 'C.ID AS CUSTOMER_ID, C.CUSTOMER_NAME, C.SEX, C.BIRTHDAY, N.ID AS COUNTRY_ID, N.COUNTRY_NAME' + 'FROM INVOICE AS I INNER JOIN CUSTOMER AS C ON (C.ID = I.CUSTOMER_ID) ' + 'LEFT JOIN COUNTRY AS N ON (N.ID = C.COUNTRY_ID)' + 'WHERE I.ID = :INVOICE_ID;' Query1.ParamByName('INVOICE_ID').AsInteger := 1; Query1.Open; ShowMessage(Format('Invoice No: %d, Customer: %s, Country: %s', [Query1.FieldByName('INVOICE_NO').AsInteger, Query1.FieldByName('CUSTOMER_NAME').AsString, Query1.FieldByName('COUNTRY_NAME').AsString]));
Invoice := Manager1.Find<TInvoice>(1); ShowMessage(Format('Invoice No: %d, Customer: %s, Country: %s', [Invoice.InvoiceNo, Invoice.Customer.Name, Invoice.Customer.Country.Name]));
We made it a generally useful ORM framework. We added a lot of features. We added lot of documentation, examples and demos. We tested it heavily with several databases and data-access components. We will release it very soon. And it's from TMS Software.
Wagner Landgraf
![](img/handwrite_message_24.png)
This blog post has received 49 comments.
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Maybe if you use the absolutely superb anydac data-access components you will be able to target virtually any database.
Tom Conlon
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Ye Zhihua
![](img/handwrite_message_24.png)
But need more info though to see how the mapping is done and if we can replace our own ORM (well, its more a object - sql mapper with proxies, mediators etc)
Where can i signup for more info?
Marius
![](img/handwrite_message_24.png)
paulo quicoli
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Steve Faleiro
![](img/handwrite_message_24.png)
Campbell Neal
![](img/handwrite_message_24.png)
oorja
![](img/handwrite_message_24.png)
Which Delphi versions will be supported?
Magno Machado Paulo
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Conner Robert
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
very nice!!!
I''m anxious to try it;-)
There will also be support for ElevateDB 2.x Unicode?
Claudio Piffer
![](img/handwrite_message_24.png)
-sql preparation
-sql execution
in the new style
-prototype
-sql execution
I don''t see really a big gain except that you can now express tables as classes, but you end up writing sometimes even more code than old fashioned.
I mean its really cool that you have this now but I don''t get ORM in general to be more efficient.
Neil
![](img/handwrite_message_24.png)
ORM is not conceptually better than SQL or any other thing. It''s just a tool. It can be useless for you, but can fit well and be very useful for others. It''s up to us to provide a good tool and explain how you use it. It''s up to you to tell if it''s good for your needs or not.
Wagner Landgraf
![](img/handwrite_message_24.png)
will it support DATASNAP ?
I´m waiting for it !
regards
Ricardo Pascoal
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
This framework will binding the object BO with componentes not dbware or we need gonna user livebindings for it ?
could you post a complete example of persisting a class or a video demo ?
thanks
Ricardo Pascoal
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Greg
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Bruno Fierens
![](img/handwrite_message_24.png)
When is the release date?
C@uly
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Majid
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
thx
Bagus Prasojo
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Thanks,
Femi
Femi
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
giuliano
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Aurelius seems to be (just another nice) way of mixing queries and objects (basicly just support classes) and like mentioned before i''m very interested in the first release. We will need a mix of Aurelius and the good old query power (and thats including the ugly dbgrid approach)
Marius
![](img/handwrite_message_24.png)
Also, is this project related to the Data Modeler product you have?
Troy Wolbrink
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
2) Data Modeler 1.8 update will include support for Aurelius code generation
Bruno Fierens
![](img/handwrite_message_24.png)
They plan to support Data-Access http://www.devart.com/ibdac/ IBDAC components?
If so, have a due date?.
Thank you.
James
![](img/handwrite_message_24.png)
Edson
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Working with explicit transactions with TMS Aurelis? (StartTransaction, Rollback, Commit, InTransaction).
I would encapsulate the transaction in a class AOP (Aspect);
Hugo Castro
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Var
Trans: IDBTransaction;
begin
Trans := MyConnection.BeginTransaction; // MyConnection is IDBConnection
Try
//...
Trans.Commit;
Except
Trans.Rollback;
Raise;
End;
End;
Wagner Landgraf
![](img/handwrite_message_24.png)
How to know if you have an active transaction?
Something like, IDBConnection.InTransaction. (I see that there is not a method signature in the interface)
Hugo Castro
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Currently we''re using data access components (ODAC) with CashedUpdates feature (it''s possible to change few records of dataset than call CancelUpdates and dataset rollback all changes on modified records)
Is it possible to implement CashedUpdates functionality in TAureliusDataset or somehow simulate it without requery data from server?
Thank you
Anton Jarmolovic
Anton Jarmolovic
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
![](img/handwrite_message_24.png)
Sergio Jonas Schulz
![](img/bullets/6.png)
![](img/handwrite_message_24.png)
Wagner Landgraf
All Blog Posts | Next Post | Previous Post
In my application I use two database - Firebird and MSSQL. Is it possible to use this product for two database in one app? Thank you.
Sergey Ivanov