Fala ai Radizeiros e Radizeiras, tudo bem com vocês?

Existem procedimentos que precisamos realizar dentro dos metadados do banco de dados.

E por vezes geramos scripts, pegamos acessos para atualizar esse metadados do banco de dados, e isso se torna muito custoso.

Imagine ter que fazer isso para mais de 200 clientes?

Pensando nisso a Embarcadero disponibilizou no Firedac a possibilidade de trabalhar com os metadados.

E para demonstrar essa parte sobre metadados, iremos criar um novo projeto, adicionaremos a conexão com o banco de dados, e dois listbox.

E o Firedac tem umas coisas muito legais, e caos queria criar uma ferramenta de migração de dados, ou se importar dados, um assistente de ORM.

Com o Firedac isso tudo é possível e muito fácil.

Nesse projeto eu adicionei dois listbox, para listar as informações aqui para nós.

E nesse projeto irei colocar um botão na tela para buscar as tabelas do banco de dados.

Você irá ver como é fácil e simples, não precisamos fazer nada de SQL, não precisamos fazer nada.

O Firedac já tem esses recursos para nós.

procedure TForm2.Button1Click(Sender : TObject);
begin
FDConnection1.GetTableNames('','','',ListBox1.Items);
end;

Observe que utilizamos a própria conexão do banco de dados para chamar as tabelas do banco de dados.

E você pode observar na imagem abaixo que temos algumas opções.

Todas essas informações irão depender do seu banco de dados, por exemplo, o SQLServer que trabalha com Schema, mas a maioria das pessoas nem utilizá isso.

E para fazermos uma busca simples, basta executar conforme no código acima.

Onde estamos passando o retorno para dentro de um ListBox.

Viu com é simples?

Já temos todas as tabelas que tenho dentro do meu banco de dados já aparecendo no ListBox.

Agora podemos aprofundar um pouco mais, onde ao clicar em uma tabela, mostrar os itens da tabela no outro ListBox.

Vamos no evento OnClick do primeiro ListBox, e a primeira coisa que irei fazer é verificar se o ListBox está selecionado ou não.

E com isso eu chamo o método que busca esses campos, passando qual item foi selecionado no primeiro ListBox.

procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox1.ItemIndex > -1 then
FDConnection1.GetFieldNames('', '', ListBox1.Items[ListBox1.ItemIndex], '', 
ListBox2.Items);
end;

Observe que de forma bem fácil foi mostrar todas as informações de uma tabela.

Fizemos tudo isso sem executar um SQL dentro de nossa aplicação, muito legal não é?

Mas existe uma outra forma de fazermos isso, e é muito lega e simples de fazer isso.

Que é um componente que o Firedac disponibiliza para nós chamado MetaInfoQuery.

Esse componente é próprio para buscar essas informações.

E esse componente já joga as informações já dentro de um DBGrid.

Então iremos adicionar mais dois DBGrid, e como fizemos com o ListBox, iremos fazer com o DBGrid com esse MetaInfoQuery.

E agora toda configuração é feita dentro do MetaInfoQuery.

O tipo de configuração já está lincado, podemos definir os Kinds.

Escolhendo umas dessas informações ele irá trazer para você, mas vamos escolher para trazer as tabelas.

E iremos definir o escopo, onde eu marco as tabelas que eu criei, as tabelas do sistema, ou outros tipos de tabelas, vou deixar somente as que eu criei.

E agora é muito simples, vamos adicionar um botão na tela e no evento OnClick deste botão iremos chamar essas informações.

procedure TForm1.Button2Click(SEnder: TObject);
begin
FDMetaInfoQuery1.Open;
end;

Somente isso já basta para chamar as informações que definimos em nosso componente.

Observe que ele ja trouxe todas as tabelas organizadas bonitinhas no DBGrid.

Muito lega e simples de se trabalhar não é verdade?

Agora para visualizar os campos da tabela dentro do outro DBGrid é mais fácil ainda.

Para isso basta eu adicionar um outro Metainfoquery, e em suas configurações, eu defino os Fields.

E vamos dentro do primeiro MetaInfoQuery dentro do evento AfterScroll, onde todas as vezes que nós mexermos nas informações do primeiro DBGrid adicionaremos uma ação no MetaInfoQuery2.

procedure TForm2.FDMetaInfoQuery1AfterScroll(DataSet: TDataSet);
begin
FDMetaInfoQuery2.Close;
FDMetaInfoQuery2.ObjectName := FDMetaInfoQuery1.FieldByName('TABLE_NAME').AsString;
FDMetaInfoQuery2.Open;
end;

Observe que fechamos o FDMetaInfoQuery2 e logo depois passamos o objeto, que é o campo da tabela, onde eu passo o TABLE_NAME do FDMetaInfoQuery1.

Dessa forma já podemos executar nosso projetinho e visualizar as informações de tabela e campos dentro dos DBGrids que adicionamos nesse projeto.

Muito legal não é pessoal?

Ao executar temos as informações da tabela e logo no outro DBGrid as informações dos campos dessa tabela.

O MetaInfoQuery já é preparado para esses tipos de informações, onde você já consegue buscar todas as informações, onde já podemos trabalhar no que for necessário.

Isso é muito útil para quem está mapeando o banco, para um ORM, para uma replicação de dados, para uma ligação de dados, onde você cria uma ferramenta para pegar as informações de um banco e passar para um outro.

E caso você tenha interesse de conhecer mais sobre as técnicas  do Firedac acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não só terá conteúdos relacionados ao Firedac, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.

CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI