Blog
All Blog Posts | Next Post | Previous PostWhat 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
This blog post has received 49 comments.
Wagner Landgraf
Maybe if you use the absolutely superb anydac data-access components you will be able to target virtually any database.
Tom Conlon
Wagner Landgraf
Ye Zhihua
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
paulo quicoli
Wagner Landgraf
Steve Faleiro
Campbell Neal
oorja
Which Delphi versions will be supported?
Magno Machado Paulo
Wagner Landgraf
Conner Robert
Wagner Landgraf
very nice!!!
I''m anxious to try it;-)
There will also be support for ElevateDB 2.x Unicode?
Claudio Piffer
-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
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
will it support DATASNAP ?
I´m waiting for it !
regards
Ricardo Pascoal
Wagner Landgraf
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
Wagner Landgraf
Greg
Bruno Fierens
When is the release date?
C@uly
Wagner Landgraf
Majid
Wagner Landgraf
thx
Bagus Prasojo
Wagner Landgraf
Thanks,
Femi
Femi
Wagner Landgraf
giuliano
Wagner Landgraf
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
Also, is this project related to the Data Modeler product you have?
Troy Wolbrink
Wagner Landgraf
2) Data Modeler 1.8 update will include support for Aurelius code generation
Bruno Fierens
They plan to support Data-Access http://www.devart.com/ibdac/ IBDAC components?
If so, have a due date?.
Thank you.
James
Edson
Wagner Landgraf
Working with explicit transactions with TMS Aurelis? (StartTransaction, Rollback, Commit, InTransaction).
I would encapsulate the transaction in a class AOP (Aspect);
Hugo Castro
Var
Trans: IDBTransaction;
begin
Trans := MyConnection.BeginTransaction; // MyConnection is IDBConnection
Try
//...
Trans.Commit;
Except
Trans.Rollback;
Raise;
End;
End;
Wagner Landgraf
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
Wagner Landgraf
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
Wagner Landgraf
Sergio Jonas Schulz
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