Quem conhece ou usa o componente LocalSQL do Firedac? Ou o BatchMove? Para a maioria dos desenvolvedores, esses componentes são relativamente desconhecidos, embora sejam muito úteis. Em dois blogs, quero explicar o valor agregado desses componentes e mostrar como eles funcionam. Este blog é sobre o componente LocalSQL.
Usando o conjunto de dados LocalSQL, é possível combinar dados de diferentes conjuntos de dados em uma consulta do Firedac. O componente garante que os conjuntos de dados fiquem disponíveis como se fossem tabelas de banco de dados. Portanto, os conjuntos de dados podem ser consultados com uma consulta SQL de um componente TFDQuery.
Isso é muito útil se você tiver dados de fontes diferentes. Por exemplo, de vários bancos de dados. Ou parcialmente na memória e parcialmente no banco de dados. Ou de diferentes componentes de conjunto de dados, por exemplo, ADO e Firedac. Com o LocalSQL, você pode reunir esses dados com muita facilidade por meio de uma simples consulta SQL. Ele permite mostrar os dados combinados de forma muito simples em uma grade ou criar estatísticas combinadas.
Abaixo, apresento um exemplo, combinando dados de um CSV com dados do banco de dados. No banco de dados, armazenei clientes com um ID e um nome. No CSV, apenas o ID do cliente é usado. Ao exibir o conteúdo do CSV, quero mostrar o nome do cliente diretamente. Isso pode ser feito com o LocalSQL sem muito esforço.
Abaixo, você pode ver a configuração do meu aplicativo. À esquerda está a conexão com o banco de dados que contém a tabela Customer. Ela é lida por meio da QueryCustomers. À direita, você vê o CsvDataset, um Firedac MemTable. Nele, o CsvMove (TFDBatchMove) carrega os dados do CSV.
No meio, você vê o componente LocalSQL, que chamei de CombinedLocalSQL. Abaixo, esse componente usa SQLite e, portanto, requer uma conexão SQLite. Você não precisa configurar mais essa conexão, basta indicar que o driver é SQLite. Nesse caso, essa é a conexão LocalSQLConnection. O componente CombinedDataset é um TFDQuery que contém a consulta SQL que coleta os dados dos conjuntos de dados.
A grade mostra primeiro duas colunas com os dados do cliente do banco de dados. As três colunas seguintes vêm do CSV.
O componente LocalSQL, conforme mencionado anteriormente, disponibiliza conjuntos de dados como se fossem tabelas de banco de dados. Para que isso seja possível, especificamos quais conjuntos de dados queremos usar e qual “nome de tabela” será dado a eles. Nas propriedades do componente LocalSQL, você encontrará a opção “DataSets” para essa finalidade (veja as imagens abaixo). Adicione os conjuntos de dados e dê a eles o nome que você deseja usar como o nome da tabela na consulta.
Ao definir o componente LocalSQL como Ativo, você poderá executar a consulta em tempo real depois disso e adicionar facilmente os campos, por exemplo. Tome cuidado com isso, pois depois de executar a consulta, os conjuntos de dados subjacentes também são definidos como Active.
Usamos uma consulta Firedac para aplicar o LocalSQL. A conexão dessa consulta é a mesma que a conexão do LocalSQL. E isso é tudo. Agora podemos começar a criar a consulta como se tivéssemos uma tabela Customer e uma tabela CsvLine.
SELECT * FROM Customer c JOIN CsvLine csv ON (csv.CustomerId = c.CustomerId)
E, é claro, você pode estender e usar isso com todas as possibilidades existentes no SQL (SQLite). Pense na cláusula WHERE, mas também nas funções de integração, como SUM, COUNT etc. A consulta Firedac funciona como de costume.
O componente LocalSQL abre uma diversidade de possibilidades para combinar, filtrar e integrar dados. Ele é amplamente aplicável porque suporta todas as formas de conjuntos de dados. Ele pode tornar muito mais simples conjuntos de dados complicados com campos de pesquisa. E funciona de forma rápida e fácil. É altamente recomendável aplicá-lo em seus projetos.
Contato