Blog
All Blog Posts | Next Post | Previous PostCurso Rápido TMS Aurelius - FireDAC ou dbExpress?
Thursday, February 28, 2013
No exemplo fornecido no post anterior, nós salvamos uma instância de TCustomer em um banco de dados local SQLite, que foi acessado de forma nativa pelo TMS Aurelius. Vamos alterar um pouco aquele código:procedure SaveCustomer(Connection: IDBconnection; CustomerName: string); var Manager: TObjectManager; Customer: TCustomer; begin Manager := TObjectManager.Create(Connection); Customer := TCustomer.Create; Customer.Name := CustomerName; Manager.Save(Customer); Manager.Free; end;
uses { }, Aurelius.Drivers.SQLite, Aurelius.SQL.SQLite; Connection := TSQLiteNativeConnectionAdapter.Create('test.db'); SaveCustomer(Connection, 'Jack');
uses { }, Aurelius.Drivers.dbExpress, Aurelius.SQL.MySQL; Connection := TDBExpressConnectionAdapter.Create(SQLConnection1, 'MySQL', False); SaveCustomer(Connection, 'Joe');
Para obter essa interface IDBConnection, nós usamos um component adapter (TDBExpressConnectionAdapter, declarado na unit Aurelius.Drivers.dbExpress) que recebe nosso componente dbExpress como parâmetro (um componente TSQLConnection de nome SQLConnection1) and retorna a interface. O segundo parâmetro indicate a qual tipo de banco de dados estamos conectando (mais especificamente, qual a sintaxe SQL que o Aurelius deverá usar para executar os comandos SQL). Essa sintaxe, 'MySQL', está disponível desde que você use a unit Aurelius.SQL.MySQL. Finalmente, o terceiro parâmetro (false) indicate que quando a interface IDBConnection for destruída, o componente "adaptado" (SQLConnection1) não deve ser destruído. Opcionalmente você pode passar true nesse parâmetro, o que pode ser útil se você está criando o componente dbExpress de conexão apenas para usar com essa interface do Aurelius.
Agora que a Embarcadero comprou a biblioteca AnyDac e transformou-a no FireDAC, nativo do Delphi, você pode usar essa biblioteca em vez de usar o dbExpress. E pra fazer isso basta apenas alterar algumas linhas de código:
uses { }, Aurelius.Drivers.AnyDac, Aurelius.SQL.MySQL; Connection := TDBExpressConnectionAdapter.Create(ADConnection1, False); SaveCustomer(Connection, 'Phil');
Outra coisa que é importante ressaltar é que usando o Aurelius, o código fica bem abstrato e flexível. O Aurelius não possui ele próprio parâmetros de conexão ao banco que você precisa configurar, como nome do servidor, senha, etc.. Tudo é configurado no componente que você já está acostumado a usar. Qualquer configuração de conexão ao banco, incluindo parâmetros avançados, estão disponíveis - é só usar o seu componente.
Portanto, se você ainda não sabe se você deve usar FireDac ou dbExpress, você pode usar ambos e trocá-los quando quiser. Não apenas esses dois, mas a versão atual do Aurelius (1.9) também adapters para ADO, Direct Oracle Access, ElevateDB, NexusDB, Absolute Database, FIBPlus, IBObjects, IBX, SQL-Direct, UniDac e UIB (Unified Interbase) e é claro acesso nativo ao SQLite. A documentação do Aurelius fornece os nomes das units e o nome das classes de adapter pra todos esses componentes, no tópico sobre component adapters.
Quanto aos bancos de dados suportados, não estão disponiveis apenas SQLite e MySQL, mas também Firebird, MS SQL Server, Interbase, Oracle, PostgreSQL, Absolute Database, DB2, ElevateDB, NexusDB e SQLite. Os nomes das units e os dialetos (sintaxes) SQL são listados no tópico da documentação SQL Dialects.
Para concluir, gostaria de mencionar que além do fato desses componentes e bancos serem suportados pelo Aurelius, eles também são extensivamente testados em cada versão do Aurelius, com todas as combinações possíveis (dbExpress conectando ao SQL Server, AnyDac conectando ao PostgreSQL, e assim por diante). Você pode verificar na documentação qual a versão mínima de cada componente foi testada pelo Aurelius, e quais combinações. Assim, todos os pequenos problems que conhecemos quando lidamos com uma biblioteca diferente de acesso ao banco, foi resolvido no Aurelius, fazendo ele efetivamente eficiente para usar com qualquer banco e qualquer componente, chaveando os bancos, sem problemas de tratamento de blobs, tipos de campos, entre outras coisas que aparecem quando fazemos uma aplicação multi-banco ou quando mudamos a biblioteca de acesso a banco.
Wagner Landgraf
This blog post has not received any comments yet.
All Blog Posts | Next Post | Previous Post