Montando SQL Dinâmico
Bom pessoal neste artigo que irei postar, mostrarei como criar um SQL dinâmico!
Mas para que serve um SQL dinâmico?
Imagine que vc terá várias opções de consultas em uma mesma tela... Exemplo
Consultar as pessoas cadastradas no teu sistema, mas lá na tela vc terá várias opções de pesquisas tipo pesquisar pessoas por setor, por periodo de contratação etc.
Então para isso teriamos que ter várias query cada uma com uma consulta diferente!
Não então é para isso que serve o SQL Dinâmico com apneas uma consulta iremos testar o que o usário
escolheu e o que a consulta irá gerar...
Vamos ao que interessa.
Em nossa tela temos 2 EDIT um para setor e outro para cargo, uma query para pesquisa, um datasource, uma DbGrid e um button.
Devemos configurar nossa conexão e  nossos componetes normalmente, ligado o datasource a DbGrid o datasource a Query.
Lembrando que:
 Query =  QueryConsultar;
 EditSetor = Edite responsável por pegar o parametro do Setor para pesquisa; 
 EditCargo = Edite responsável por pegar o parametro do Cargo para pesquisa;
                      BtnConsultar = Botão responsável por efetuar a consultar quando for clicado;
   No evento onclick do btnConsultar devemos incluir o seguinte código:
        QueryConsultar.Close;  //Fechamos a Query
        QueryConsultar.SQL.Clear; //Limpamos o SQL que estiver contido nela
        QueryConsultar.SQL.Add('SELECT'); // Inclusão do nosso SQL Dinâmico
        QueryConsultar.SQL.Add('    TB_PESSOAS.NOME "Nome" ,');
        QueryConsultar.SQL.Add('   TB_PESSOAS.C_SETOR "Setor",');
        QueryConsultar.SQL.Add('   TB_PESSOAS.C_CARGO "CARGO",');   
        QueryConsultar.SQL.Add('FROM TB_PESSOAS');
        QrConsulta.SQL.Add('WHERE (TB_PESSOAS.C_CODIGO IS NOT NULL)');
   //Caso nos edits não tenha sido informado nada automaticamente irá abrir a consulta com todos os dados encontrados.
   // SETOR
                if EditSetor.Text <> '' then  // Se existir algum valor no EditSetor irá incluir como parametro de pesquisa de Seto,  mostrando apenas as pessoas desse determinado Setor.
                   QrConsulta.SQL.Add('  AND (TB_PESSOAS.C_SETOR = '+QuotedStr(EditSetor.Text)+')');
  // CARGO
                if EditCargo.Text  <> '' then  // Se existir algum valor no EditCargo irá incluir como parametro de pesquisa de Cargo,  mostrando apenas as pessoas desse determinado cargo.
                  QrConsulta.SQL.Add('  AND (TB_PESSOAS.C_CARGO = '+QuotedStr(EditCargo.Text)+')');    
     QueryConsultar.SQL.Add('ORDER BY  TB_PESSOAS.NOME "Nome');  //Pesquisa sendo ordenada pelo nome
     QueryConsultar.Open; // Consulta SQL sendo aberta
É isso aí galera, com isso podemos poupar componentes em nosso sistema, além de um enorme ganho de tempo, deixando nossas consultas mais rápidas!
Espero que tenham gostado...
Até a próxima..