A resposta obvia para este post seria: Utilize o DISTINCT na hora de fazer o select no banco. Infelizmente, a vida nem sempre é tão simples assim. O que mostro neste post é uma forma alternativa (e mais trabalhosa do que utilizar o distinct), mas que vai te dar um caminho a mais para conseguir este resultado.
Para contextualizar, imagine uma Datawindow com o seguinte select:
SELECT cli_id, cli_nome, cli_telefone, cli_email FROM tb_cliente
Como as colunas de ID costumam a ser únicas, vamos mostrar eliminar linhas de clientes que tenham o nome (cli_nome) duplicado.
Os passos que devem ser feitos para conseguir isso são:
1.Vamos fazer com que a Datawindow parece de se atualizar visualmente, para ganharmos performance:
dw_1.SetRedraw(false)
2.Agora vamos ordenar a Datawindow pelas colunas que serão utilizadas.
dw_1.SetSort("cli_name a") dw_1.Sort()
3.O próximo passo é criar uma expressão para filtrar a DataWindow. Ela que será responsável por encontrar e esconder as linhas que serão consideradas como duplicadas.
dw_1.SetFilter("IsNull(cli_nome[-1]) OR cli_nome[-1] <> cli_nome") dw_1.filter()
4.Neste momento sua Datawindow já está filtrada, mas lembre-se que desligamos as atualizações visuais. Então agora temos que liga-las novamente.
dw_1.SetRedraw(true)
Se você quiser utilizar mais uma coluna para verificar se a linha é duplicada ou não, basta acrescenta-la nas expressões de sort e filter.
Dica: Se você utilizar uma função que faça apenas este processamento na Datawindow, para fins de organização do fonte, você pode utilizar o comando post, para “agendar” o SetRedraw(true). Exemplo:
dw_1.SetRedraw(false) dw_1.post SetRedraw(true)
O comando dw_1.post SetRedraw(true) faz uma espécie de agendamento daquele comando. Ele será executado assim que o evento ou função atual acabarem. Isso ajuda em termos de organização do fonte, pois você mantem coisas similares agrupadas e não corre o risco de esquecer de ligar o SetRedraw no final da função/evento.
Espero ter ajudado.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022