Em alguns dos projetos desse primeiro semestre de 2018 precisei implementar uma rotina SQL para efetuar busca incremental. Nesta postagem divido com vocês o resultado desse trabalho.
Busca Incremental
Minha definição de busca incremental é de que busca incremental consiste em buscar os termos de busca em blocos ou partes, em nosso caso campos da tabela.
Aplicabilidade
Imagine um cenário em que você precise pesquisa por um produto no banco de dados, entretanto sabe apenas parte, ou partes, do termos a serem pesquisados. Indo mais além essa sua pesquisa também não tem muita certeza se deve buscar no nome do produto ou no modelo. Então, esse é o tipo de caso em que aplica-se a solução proposta nessa postagem.
Exemplificando
Preciso buscar um produto que não sei como foi cadastrado, sei que ele tem em seu campo DESCRICAO ou seu campo COMPATIBILIDADE as palavras “BATERIA HP”.
Essa nossa rotina faz com que a cada ocorrência de um determinado caractere, seja executada uma busca no banco de dados dos termos separados por esse caractere, no nosso exemplo vamos usar o ” ” (espaço em branco).
Isso fará com que seja executada no campo DESCRICAO uma consulta contendo o termo “BATERIA” e uma nova consulta contendo o termo “HP”. Os mesmo termos também seriam consultados no campo COMPATIBILIDADE e quantos mais eu tiver configurado na função.
União ou Interseção
Uma outra funcionalidade implementada na função é a possibilidade de escolher se a busca dos termos será efetuada nos campos por união, ou por interseção. Para o caso de união, basta passar o parâmetro OR e no caso de interseção passamos AND.
Apresentando a função
function SentencaBuscaIncremental(var aListaCampos, aComplWhere, aOrderBy: string; const aCampo, aOR_AND, aLimitador, aTexto: string): TStringList;
A função em contém os seguintes parâmetros:
aListaCampos –> listagem dos campos a serem exibidos no select do SQL, normalmente indo até instrução “FROM [TABELA]” nos casos simples, ou finalizando nos “JOINs” em casos mais complexos. Uma definição mais simples seria tudo antes do “where”.
- aComplWhere –> Complemento do where principal, podendo englobar a instrução “Group by” nos casos necessários.
- aOrderBy –> senteça que define o order by do SQL.
- aCampo –> campo ou lista de campos, separados por vírgula (,), nos quais os critérios da busca serão aplicados.
- aOR_AND –> determina se a instrução incremental se dará por união ou interseção.
- aLimitador –> conjunto de caracteres que informam o limite entre os termos de busca.
- aTexto –> cadeia de carecteres contendo os termos de busca.( separados pelo “delimitador” ou não)
Esta função tem como retorno uma TStringList.
Fonte no GitHub
O fonte está disponibilizado no GitHub, faça o download através do link abaixo:
https://github.com/landersongomes/exemplos/tree/master/Sentença_Busca_Incremental.
Em breve gravo um vídeo demonstrando a utilização.
Espero que seja útil, até a próxima!
Exemplo Utilização Busca Incremental