SlideShare uma empresa Scribd logo
1 de 32
FireDAC
Guinther Pauli - MVP
Agenda
• Recursos intermediários, avançados e segredos do
FireDAC
• Recursos semelhantes do FireDAC com DBX + CDS
+ DSP (como fazer no FireDAC o que já sei fazer no
CDS)
• Recursos do FireDAC que não possuem
equivalência no DBX + CDS + DSP
• Recursos onde o FireDAC é melhor que o
DBX + CDS + DSP
Arquitetura
FireDAC
• Um conjunto de componentes universais de acesso a dados
• Desenvolvimento para qualquer banco de dados
• Delphi e C++Builder
• Alta performance, fácil de usar, conexão com bancos locais
e corporativos
• Acesso a dados universal, porém com características
específicas de cada BD
• Baseado em classes + componentes TDataSet
Recovering Connection
• Ambiente instável, rede ou DBMS pode cair
• Aplicativo precisa recuperar a conexão e continuar a
comunicação
• FireDAC pode recuperar automaticamente a conexão
• Detecta quando uma conexão foi perdida, permite dar uma
resposta
• FDConnection.ResourceOptions.AutoReconnect := true;
• Erro só ocorre ao executar um Open, ExecSQL, Ping por ex.,
então a exceção EFDDBEngineException é levantada com
tipo ekServerGone
Offlining Connection
• Lembra por que muitos usavam BDE sem Data Controls?
• Semelhante a um cliente multi-camadas (CDS,
KeepConnection etc)
• Cliente está desconectado, ativa só quando precisa trocar
dados
• Útil em ambiente instável, preservar recursos do BD
• Conexão está fechada, mas os datasets ficam abertos
• FDConnnection.Offline();
• Recuperar conexão com AutoReconnect ou OnLine();
SQL Dialect Abstraction
• Se o aplicativo precisa suportar múltiplos SGBDs, deve estar
ciente de que seus dialetos SQL podem ser diferentes
• FireDAC permite que você escreva os comandos SQL
independente de dialeto
• Semelhante a diretivas de compilação IFs do Pascal
• Mais fácil criar aplicações multi-banco, sem perder recursos
específicos de cada um (usando SQL “genérico”) ou uma API,
componente de terceiro etc.
Substitution Variables e Macros
• Qualquer coisa pode ser variável (parâmetro) no seu SQL,
estamos acostumados a usar parâmetros em where por
exemplo
• Pense em qualquer coisa como um parâmetro, de strings,
comandos a objetos, como por exemplo, o próprio nome da
tabela
• Ex.: Isso não pode ser feito com DBX “select * from :TABELA”
• No FireDAC, você pode usar variáveis de substituição
(MACROS), como um processador de templates, e depois
substituir o texto da variável, usando os caracteres “!” (string)
e “&” (SQL)
Array DML
• Permite enviar um único comando para o DBMS com um
conjunto de parâmetros (array)
• Cada parâmetro de comando tem uma matriz de valores
• Todos os parâmetros têm matrizes do mesmo comprimento
• FireDAC solicita o DBMS para executar um comando uma
vez para cada linha do array
• Reduz a quantidade de comunicação entre DBMS e cliente
• Acelera o tempo de execução
Executing SQL Scripts
• Script = conjunto de comandos SQL executados separadamente
• Manutenção, criação, versionamento, carga inicial de BD
• TFDScript vs. TFDQuery.ExecSQL
• Pode ser dividida em várias transações (lote é uma única)
• Totalmente controlado pelo cliente (lote controlado pelo BD)
• A execução do script pode ser colocada em log
• o script fornece feedback progresso execução
• FireDAC tem componente pronto para feedback
(TFDGUIxScriptDialog)
Local SQL
• Permite a execução de comandos SQL, onde os descendentes
de TDataSet são utilizadas em vez das tabelas de BD
• Usa driver do SQLite por baixo
• TFDLocalSQL contém a coleção de todos os TDataSets
• Dados de diferentes BDs usando diferentes engines (BDE, DBX,
ADO)
• Consultas heterogêneas, in-memory database, modo off-line
avançado
• Pode ser usado para migração de BD
• Pode ser usado de FireDAC para FireDAC, esqueça o “Filter”!
Conexão FireDAC
Conexão DBX
Conexão Local
Query local, trazendo dados de
“tabelas” (TDataSets) locais, fazendo
joins, filtros, order, where etc, tudo
localmente em cache, usando
*diferentes engines de acesso como se
fossem fontes de dados*
ETL – Extract, Transform, Load
• Extract – extrair dados de fontes homogêneas ou heterogêneas
• Transform – transformar os dados para armazenar em um
formato ou estrutura específica para propósitos de análise
• Load – armazenar no BD final (BD relacional, data warehouse)
• FONTE / DESTINO: TXT, DataSet (qualquer engine / BD),
FireDAC (SQL)
• Exemplos de uso: extrair dados de um BD e exportar para TXT,
ou ler de um arquivo TXT e armazenar em uma tabela do BD
(carga), transferir dados de um dataset para outro (engines
diferentes)
Extract
Load
Transform
TDataSet,
qualquer
engine e
BD
Criação direta
da tabela
(metadados +
dados) no BD
via FireDAC
Arquivo texto
Fonte
Metadata
• API comum para retornar metadados de qualquer BD, usando
mesmo código / componentes;
• TFDConnection - métodos para retornar nomes de objetos do BD:
GetCatalogNames, GetSchemaNames, GetTableNames,
GetFieldNames, GetKeyFieldNames, GetGeneratorNames,
GetPackageNames, GetStoredProcNames etc.
• TFDMetaInfoQuery (TDataSet) - propriedade MetaInfoKind
(mkCatalogs, mkSchemas, mkTables, mkTableFields, mkIndexes,
mkIndexFields, mkPrimaryKey, mkPrimaryKeyFields,
mkForeignKeys, mkForeignKeyFields, mkPackages, mkProcs,
mkProcArgs, mkGenerators, mkResultSetFields, mkTableTypeFields)
Cache e Update
• Cache Updates em memória, estilo antigo Cache Updates do
BDE e Data do ClientDataSet
• ApplyUpdates permite enviar as atualizações para o BD, em um
único lote (Delta, estilo ChangeLog do CDS)
• Cache é feita em memória, como CDS
• Componente específico separado (opcional) para geração de
comandos de atualização (update, delete, insert, lock), estilo
BDE / IBX
• Suporte a SavePoint (snapshot), UndoLastChange
• Suporte a Data e Delta (IFDDataSetReference)
Save to File e Load from File
• Persistência em disco, estilo CDS
• Suporte aos formatos XML, JSON e binário
• Necessário registrar os componentes TFDStanStorageBinLink,
TFDStanStorageXMLLink e TFDStanStorageJSONLink
• Também pode-se ler os dados de XML / JSON semelhante ao
CDS
Fetch
• Total controle sobre como os dados são obtidos do BD
• Propriedade FetchOptions.Mode e RowsetSize
• Mode = fmManual, fmOnDemand, fmAll, fmExactRecsMax
• RowsetSize = tamanho do pacote
• Semelhante ao uso de Packet Records do CDS
• Pode-se trazer os dados por demanda
• Cuidado com o cursor
http://fb.com/DelphiBrasil
http://fb.com/EmbarcaderoBR
http://www.embarcadero.com/mvp-directory
http://www.embarcaderobr.com.br/treinamentos/
guintherpauli.blogspot.com
http://www.facebook.com/guintherpauli
http://www.twitter.com/guintherpauli
http://br.linkedin.com/in/guintherpauli
http://www.gpauli.com
guintherpauli@gmail.com
guinther.pauli
Download
Code Central
http://bit.ly/fontesfiredac

Mais conteúdo relacionado

Mais procurados

Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativaAluisioSantos4
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptSurvey Department
 
Função exponencial exercícios resolvidos
Função exponencial   exercícios resolvidosFunção exponencial   exercícios resolvidos
Função exponencial exercícios resolvidosjorgehenriqueangelim
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19Joohyun Han
 
Chap 4 PHP.pdf
Chap 4 PHP.pdfChap 4 PHP.pdf
Chap 4 PHP.pdfHASENSEID
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Understanding RDF: the Resource Description Framework in Context (1999)
Understanding RDF: the Resource Description Framework in Context  (1999)Understanding RDF: the Resource Description Framework in Context  (1999)
Understanding RDF: the Resource Description Framework in Context (1999)Dan Brickley
 

Mais procurados (12)

Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativa
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python Script
 
Função exponencial exercícios resolvidos
Função exponencial   exercícios resolvidosFunção exponencial   exercícios resolvidos
Função exponencial exercícios resolvidos
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19
 
Chap 4 PHP.pdf
Chap 4 PHP.pdfChap 4 PHP.pdf
Chap 4 PHP.pdf
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Understanding RDF: the Resource Description Framework in Context (1999)
Understanding RDF: the Resource Description Framework in Context  (1999)Understanding RDF: the Resource Description Framework in Context  (1999)
Understanding RDF: the Resource Description Framework in Context (1999)
 

Destaque

Migrando 4 milhões de linhas de Delphi 7 para XE7
Migrando 4 milhões de linhas de Delphi 7 para XE7Migrando 4 milhões de linhas de Delphi 7 para XE7
Migrando 4 milhões de linhas de Delphi 7 para XE7José Araújo
 
Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Diego Rosa
 
FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014Alan Glei
 
Rad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacRad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacLanderson Gomes
 
Bate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareBate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareAdriano Santos
 
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013Vic Fernandes
 
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Cássio Nandi Citadin
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Dados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapDados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapLanderson Gomes
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Kelver Merlotti
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphiHelder Lopes
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps Vic Fernandes
 

Destaque (16)

Migrando 4 milhões de linhas de Delphi 7 para XE7
Migrando 4 milhões de linhas de Delphi 7 para XE7Migrando 4 milhões de linhas de Delphi 7 para XE7
Migrando 4 milhões de linhas de Delphi 7 para XE7
 
Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014Migrando aplicações para FireDac - Embarcadero Conference 2014
Migrando aplicações para FireDac - Embarcadero Conference 2014
 
FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014
 
Rad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacRad Studio 10 com Android e Unidac
Rad Studio 10 com Android e Unidac
 
Bate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareBate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftware
 
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
 
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Dados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapDados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnap
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
 

Semelhante a FireDAC - Embarcadero Conference 2015

Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Fernando Rizzato
 
ParallaDB - Framework de Persistência Android e Desktop
ParallaDB - Framework de Persistência Android e DesktopParallaDB - Framework de Persistência Android e Desktop
ParallaDB - Framework de Persistência Android e DesktopMichel Montenegro
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBAlan Glei
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdfgabriel-colman
 

Semelhante a FireDAC - Embarcadero Conference 2015 (20)

Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC
 
ParallaDB - Framework de Persistência Android e Desktop
ParallaDB - Framework de Persistência Android e DesktopParallaDB - Framework de Persistência Android e Desktop
ParallaDB - Framework de Persistência Android e Desktop
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDB
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Ado.net
Ado.netAdo.net
Ado.net
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf
 

FireDAC - Embarcadero Conference 2015

  • 2. Agenda • Recursos intermediários, avançados e segredos do FireDAC • Recursos semelhantes do FireDAC com DBX + CDS + DSP (como fazer no FireDAC o que já sei fazer no CDS) • Recursos do FireDAC que não possuem equivalência no DBX + CDS + DSP • Recursos onde o FireDAC é melhor que o DBX + CDS + DSP
  • 4. FireDAC • Um conjunto de componentes universais de acesso a dados • Desenvolvimento para qualquer banco de dados • Delphi e C++Builder • Alta performance, fácil de usar, conexão com bancos locais e corporativos • Acesso a dados universal, porém com características específicas de cada BD • Baseado em classes + componentes TDataSet
  • 5. Recovering Connection • Ambiente instável, rede ou DBMS pode cair • Aplicativo precisa recuperar a conexão e continuar a comunicação • FireDAC pode recuperar automaticamente a conexão • Detecta quando uma conexão foi perdida, permite dar uma resposta • FDConnection.ResourceOptions.AutoReconnect := true; • Erro só ocorre ao executar um Open, ExecSQL, Ping por ex., então a exceção EFDDBEngineException é levantada com tipo ekServerGone
  • 6.
  • 7. Offlining Connection • Lembra por que muitos usavam BDE sem Data Controls? • Semelhante a um cliente multi-camadas (CDS, KeepConnection etc) • Cliente está desconectado, ativa só quando precisa trocar dados • Útil em ambiente instável, preservar recursos do BD • Conexão está fechada, mas os datasets ficam abertos • FDConnnection.Offline(); • Recuperar conexão com AutoReconnect ou OnLine();
  • 8.
  • 9. SQL Dialect Abstraction • Se o aplicativo precisa suportar múltiplos SGBDs, deve estar ciente de que seus dialetos SQL podem ser diferentes • FireDAC permite que você escreva os comandos SQL independente de dialeto • Semelhante a diretivas de compilação IFs do Pascal • Mais fácil criar aplicações multi-banco, sem perder recursos específicos de cada um (usando SQL “genérico”) ou uma API, componente de terceiro etc.
  • 10.
  • 11. Substitution Variables e Macros • Qualquer coisa pode ser variável (parâmetro) no seu SQL, estamos acostumados a usar parâmetros em where por exemplo • Pense em qualquer coisa como um parâmetro, de strings, comandos a objetos, como por exemplo, o próprio nome da tabela • Ex.: Isso não pode ser feito com DBX “select * from :TABELA” • No FireDAC, você pode usar variáveis de substituição (MACROS), como um processador de templates, e depois substituir o texto da variável, usando os caracteres “!” (string) e “&” (SQL)
  • 12.
  • 13. Array DML • Permite enviar um único comando para o DBMS com um conjunto de parâmetros (array) • Cada parâmetro de comando tem uma matriz de valores • Todos os parâmetros têm matrizes do mesmo comprimento • FireDAC solicita o DBMS para executar um comando uma vez para cada linha do array • Reduz a quantidade de comunicação entre DBMS e cliente • Acelera o tempo de execução
  • 14.
  • 15. Executing SQL Scripts • Script = conjunto de comandos SQL executados separadamente • Manutenção, criação, versionamento, carga inicial de BD • TFDScript vs. TFDQuery.ExecSQL • Pode ser dividida em várias transações (lote é uma única) • Totalmente controlado pelo cliente (lote controlado pelo BD) • A execução do script pode ser colocada em log • o script fornece feedback progresso execução • FireDAC tem componente pronto para feedback (TFDGUIxScriptDialog)
  • 16.
  • 17.
  • 18. Local SQL • Permite a execução de comandos SQL, onde os descendentes de TDataSet são utilizadas em vez das tabelas de BD • Usa driver do SQLite por baixo • TFDLocalSQL contém a coleção de todos os TDataSets • Dados de diferentes BDs usando diferentes engines (BDE, DBX, ADO) • Consultas heterogêneas, in-memory database, modo off-line avançado • Pode ser usado para migração de BD • Pode ser usado de FireDAC para FireDAC, esqueça o “Filter”!
  • 19. Conexão FireDAC Conexão DBX Conexão Local Query local, trazendo dados de “tabelas” (TDataSets) locais, fazendo joins, filtros, order, where etc, tudo localmente em cache, usando *diferentes engines de acesso como se fossem fontes de dados*
  • 20. ETL – Extract, Transform, Load • Extract – extrair dados de fontes homogêneas ou heterogêneas • Transform – transformar os dados para armazenar em um formato ou estrutura específica para propósitos de análise • Load – armazenar no BD final (BD relacional, data warehouse) • FONTE / DESTINO: TXT, DataSet (qualquer engine / BD), FireDAC (SQL) • Exemplos de uso: extrair dados de um BD e exportar para TXT, ou ler de um arquivo TXT e armazenar em uma tabela do BD (carga), transferir dados de um dataset para outro (engines diferentes)
  • 21.
  • 22. Extract Load Transform TDataSet, qualquer engine e BD Criação direta da tabela (metadados + dados) no BD via FireDAC Arquivo texto Fonte
  • 23. Metadata • API comum para retornar metadados de qualquer BD, usando mesmo código / componentes; • TFDConnection - métodos para retornar nomes de objetos do BD: GetCatalogNames, GetSchemaNames, GetTableNames, GetFieldNames, GetKeyFieldNames, GetGeneratorNames, GetPackageNames, GetStoredProcNames etc. • TFDMetaInfoQuery (TDataSet) - propriedade MetaInfoKind (mkCatalogs, mkSchemas, mkTables, mkTableFields, mkIndexes, mkIndexFields, mkPrimaryKey, mkPrimaryKeyFields, mkForeignKeys, mkForeignKeyFields, mkPackages, mkProcs, mkProcArgs, mkGenerators, mkResultSetFields, mkTableTypeFields)
  • 24.
  • 25. Cache e Update • Cache Updates em memória, estilo antigo Cache Updates do BDE e Data do ClientDataSet • ApplyUpdates permite enviar as atualizações para o BD, em um único lote (Delta, estilo ChangeLog do CDS) • Cache é feita em memória, como CDS • Componente específico separado (opcional) para geração de comandos de atualização (update, delete, insert, lock), estilo BDE / IBX • Suporte a SavePoint (snapshot), UndoLastChange • Suporte a Data e Delta (IFDDataSetReference)
  • 26.
  • 27.
  • 28. Save to File e Load from File • Persistência em disco, estilo CDS • Suporte aos formatos XML, JSON e binário • Necessário registrar os componentes TFDStanStorageBinLink, TFDStanStorageXMLLink e TFDStanStorageJSONLink • Também pode-se ler os dados de XML / JSON semelhante ao CDS
  • 29.
  • 30. Fetch • Total controle sobre como os dados são obtidos do BD • Propriedade FetchOptions.Mode e RowsetSize • Mode = fmManual, fmOnDemand, fmAll, fmExactRecsMax • RowsetSize = tamanho do pacote • Semelhante ao uso de Packet Records do CDS • Pode-se trazer os dados por demanda • Cuidado com o cursor
  • 31.