Página 1 de 1

Códigos de um cadastro que não estão em outro

Enviado: 14 Jan 2020 17:47
por JoséQuintas
Acabei de precisar....
Tem lá o cadastro de formas de pagamento, e a indicação no cadastro do cliente.
(Na época não tinha validação na exclusão, e apagaram formas de pagamento em uso)

Como listar as formas de pagamento que ficaram sem cadastro?

1) a informação está no cadastro, então...

SELECT CDFORPAG FROM JPCADASTRO

2) não preciso repetido, então...

SELECT DISTINCT CDFORPAG FROM JPCADASTRO

3) O que não tem no outro cadastro
duas opções:

a) comparar com a lista do outro cadastro
SELECT DISTINCT CDFORPAG FROM JPCADASTRO WHERE NOT CDFORPAG IN ( SELECT IDFORPAG FROM JPFORPAG )

b) idem, mostrando o que não tem equivalência
select distinct cdforpag from jpcadastro
left join jpforpag on jpforpag.idforpag = jpcadastro.cdforpag
where
jpforpag.idforpag is null


*** NAO DEU CERTO *** relacionar e mostrar diferentes *** NAO DEU CERTO ***
select distinct cdforpag from jpcadastro
left join jpforpag on jpforpag.idforpag = jpcadastro.cdforpag
where
jpcadastro.cdforpag <> jpforpag.idforpag

Pois é... várias opções de fazer a mesma coisa.

E como se usa isso no programa?

Código: Selecionar todos

WITH OBJECT oRs := oConexao:Execute( "SELECT DISTINCT CDFORPAG FROM JPCADASTRO WHERE NOT CDFORPAG IN ( SELECT IDFORPAG FROM JPFORPAG )" )
   DO WHILE ! :Eof()
      ? :Fields( "IDFORPAG" ):Value
      :MoveNext()
   ENDDO
   :Close()
ENDWITH
Mas e se quiser testar fora do programa?
HeidiSQL
Lembra o DBASE e DBFs, mas... comandos SQL
mysql.png
Já comentei aqui:
O DBASE era algo parecido com isso, digitar e mostrar o resultado.
Com certeza, todos aqui já usaram o DBASE, então.... é quase como voltar ao passado... como um DBASE que recebeu mais opções.
A principal diferença é que agora o aplicativo também pode usar.

Conclusão:
Usar SQL é voltar ao passado, é um recomeço das coisas.

Códigos de um cadastro que não estão em outro

Enviado: 15 Jan 2020 11:34
por Marcos Kieron
Faça uma rotina que "varra" o cadastro, o que não estiver na outra tabela, crie de novo e passe a validar, simples assim