[firebase-br] RESOLVIDO Re: SQLWHEREITENS, Campo do tipo Data comparado com IS NULL

Gustavo Novaes gutonovaes19 em gmail.com
Qua Fev 12 13:36:14 -03 2020


Carlos e demais, boa tarde.
Hoje cedo procurei entre os exemplos (pasta samples) sob IBO, por exemplos.
Já tinha tentado antes mas só encontrei a "resposta" num exemplo cujo nome
do projeto não tinha haver com KEYLINKS. Foi o Pricelist.

resumindo:
SQL: select tabela1.campo1, tabela1.campo2, tabela1.campo3, tabela2.campo2
from tabela1
left join tabela2 on
tabela1.campo1 = tabela2.campo2
KEYLINKS - referir apenas aos campos da tabela condutora (principal), no
meu caso  tabela 1;
Então: keylinks = TABELA1.CAMPO1.
Se fosse chave composta, adicionar outra linha, TABELA1.CAMPO2

As clausulas WHERE não precisam estar programadas previamente.
Podem ser feito no evento ONPREPARESQL.
Então:
prrocedure iboqueryonpreparesql(sender:tobject);
begin
       if LISTAR_APENAS_ATIVOS = TRUE then
           iboquery.sqlwhereitens.add('(TABELA1.DATADEMISSAO IS NULL')
...
end;

Pode-se adicionar quantas instruções where desejar. O IBO encarrega-se de
concatena-las adicionando o AND.

Instruções "OR" sim, devem ser explicitadas. Tá bem explicado no help.

Resumindo: eu não entendia como deveria e o que deveria ser informado nas
instruções KEYLINKS.

Ainda não entendi como trabalhar com ordenação (pode-se modificar o índice
sem precisa fechar e reabrir a query).

Deveria haver algum documento mais detalhado para iniciantes como eu.
Conceitos demoram a ser entendidos. Mas a ferramenta é muio boa.

Segue o baile, obrigado a todos pela paciência.

*Gustavo Novaes *




Em qua., 12 de fev. de 2020 às 13:10, Carlos Andrade <krlosgilson em gmail.com>
escreveu:

> Gustavo Novaes, se o trecho que código que é adicionado não estiver
> dentro de "WHERE", ou seja for parte do "JOIN" você deve adicionar " AND
> " antes, caso contrário seu SQL ficará assim, gerando erro na instrução:
>
> (SELECT MOCADPAC.CODPAC , MOCADPAC.NOMEPESSOA, MOCADPA1.EMAIL,
> MOCADPAC.DATADEMISSAO FROM MOCADPAC
> LEFT JOIN MOCADPA1 ON
> MOCADPAC.CODPAC=MOCADPA1.CODPAC AND
> MOCADPAC.DEPENDENTE=MOCADPA1.DEPENDENTE(DATADEMISSAO IS NULL)
>
> Eu acredito que o campo "DATAEMISSAO" faça parte da tabela "MOCADPAC", se
> sim, deve então ficar desta forma:
>
> (SELECT MOCADPAC.CODPAC , MOCADPAC.NOMEPESSOA, MOCADPA1.EMAIL,
> MOCADPAC.DATADEMISSAO FROM MOCADPAC
> LEFT JOIN MOCADPA1 ON
> MOCADPAC.CODPAC=MOCADPA1.CODPAC AND
> MOCADPAC.DEPENDENTE=MOCADPA1.DEPENDENTE
> WHERE (DATADEMISSAO IS NULL)
>
> ficando assim a linha a ser adicionada:
>
> if checkbox.checjed then
>      iboquery1.sqlwhereitens.add(' WHERE (DATADEMISSAO IS NULL)');
>
>
> Em 12/02/2020 12:00, lista-request em firebase.com.br escreveu:
> > Cantu,
> > A instrução SQL mantive apenas a seleção e o JOIN, sem clausulas WHERE
> > (SELECT MOCADPAC.CODPAC , MOCADPAC.NOMEPESSOA, MOCADPA1.EMAIL,
> > MOCADPAC.DATADEMISSAO FROM MOCADPAC
> > LEFT JOIN MOCADPA1 ON
> > MOCADPAC.CODPAC=MOCADPA1.CODPAC AND
> > MOCADPAC.DEPENDENTE=MOCADPA1.DEPENDENTE
> >
> > No formulário tenho um checknox que se selecionado (omitir demitidos)
> > adiciona aquela instrução no evento ONPREPARESQL.
> > Há um botão onde executo:
> >     iboquery1.invalidadesql;
> >     iboquery1.refresh;
> >
> > No evento onpreparesql:
> >
> > if checkbox.checjed then
> >      iboquery1.sqlwhereitens.add('(DATADEMISSAO IS NULL)').   (somente
> > ativos).
> >
> > Talvez eu não tenha entendido como preparar essa query, o que colocar em
> > KeyLinhs, JoinLinks, Ordering....
> >
> > "Percebi" que não devo utilizar pseudonimos para as tabelas (.... FROM
> > MOCADPAC PAC) ou (...FROM MOCADPAC AS PAC) para referencia-la ao longo da
> > instrução.
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista