4D v16.3QUERY BY FORMULA |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY FORMULA
|
QUERY BY FORMULA ( tabela {; formula} ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
tabela | Tabela |
![]() |
Tabela para a qual retornar a seleção de registros | |||||
formula | Booleano |
![]() |
Fórmula de pesquisa | |||||
QUERY BY FORMULA procura registros em tabela. QUERY BY FORMULA modifica a seleção atual de tabela para o processo atual e faz do primeiro registro o novo registro atual.
QUERY BY FORMULA e QUERY SELECTION BY FORMULA funcionam exatamente da mesma maneira, exceto que QUERY BY FORMULA busca em todos os registros da tabela e QUERY SELECTION BY FORMULA busca unicamente nos registros da seleção atual.
Os dois comandos aplicam formula a cada registro da tabela ou da seleção. formula é uma expressão booleana que deve devolver TRUE ou FALSE. Se formula devolve TRUE, o registro está incluído na nova seleção.
O parâmetro formula pode ser simples, como a comparação de um campo com um valor; ou complexa, como a realização de um cálculo ou inclusive uma avaliação dos valores em uma tabela relacionada. formula pode ser uma função 4D (comando), ou uma expressão que você tenha criado. Quando trabalhe com campos de tipo Alfa ou Texto, pode utilizar em formula símbolos arroba (@) assim como o operador "contém" (%) para pesquisas de palavras chaves. Para maior informação, por favor consulte a descrição do comando QUERY.
Se omitir o parâmetro formula, 4D mostra a caixa de diálogo de pesquisa pela fórmula.
Quando termina a pesquisa, o primeiro registro da nova seleção é carregado desde o disco e é convertido no registro atual.
Estes comandos são otimizados e podem particularmente aproveitar os índices. Quando o tipo de pesquisa o permite, esses comandos executam pesquisas equivalentes ao comando QUERY. Por exemplo, a instrução QUERY BY FORMULA ([minhatabela]; [minhatabela]meucampo=valor) será executado igual que QUERY ([minhatabela]; [minhatabela]meucampo=valor), que permite utilizar índices. 4D também pode otimizar pesquisas que contenham partes que não possam ser otimizadas, executando primeiro as partes otimizáveis e depois combinando os resultados com o resto da pesquisa. Por exemplo, a instrução QUERY BY FORMULA ([minhatabela]; Length(meucampo)=valor1 | meucampo=valor2 ) será otimizado parcialmente.
Estes comandos por padrão realizam “uniões” como SQL. Isso significa que não é necessário que exista uma relação automática estrutural entre a tabela A e a tabela B para poder executar uma instrução do tipo QUERY BY FORMULA([Tabela_A];[Tabela_A]campo_X = [Tabela_B]campo_Y) (ver exemplo 3). A primeira parte da fòrmula ([Table_A]field_X = [Table_B]field_Y) estabelece a uniáo entre dois campos e a segunda parte ([Table_B]field_Y = "abc") define o critèrio de pesquisa (ao menos um critèrio deve ser estabelecido).
as relações definidas no editor de estrutura, si existem, em principio não são utilizadas. Entretanto, esses comandos utilizarão relações automáticas nos seguintes casos:
- Se a formula não pode ser quebrada em elementos da forma { campo ; comparador ; valor}
- Se dois campos da mesma tabela são comparados.
Nota: por razões de compatibilidade, é possível desativar o mecanismo de uniões, seja globalmente através das Preferências do banco (apenas bancos de dados convertidos) ou por processos utilizando o comando SET DATABASE PARAMETER.
4D Server
A partir da versão 11 de 4D Server, este comando se executa no servidor, o qual otimiza sua execução. Note que quando as variáveis são chamadas diretamente em fórmula, a ordenação se calcula com o valor da variável na máquina cliente. Por exemplo, a sentença QUERY BY FORMULA ([minhatabela]; [minhatabela]meucampo=minhavariável) será executada sobre o servidor mas com o conteúdo da variável minhavariável da máquina cliente.
Este exemplo busca os registros para todas as faturas que sejam introduzidas em dezembro de qualquer ano. O princípio consiste em aplicar a função Month of a cada registro. Esta pesquisa não poderia ser realizada de outra forma sem criar um campo separado para o mês:
QUERY BY FORMULA([Faturas];Month of([Faturas]Entrada)=12) ` Buscar as faturas entradas em dezembro
Este exemplo procura os registros das pessoas que tenham nomes com mais de 10 caracteres:
QUERY BY FORMULA([Pessoas];Length([Pessoas]Nome)>10) ` Pesquisar nomes de mais de dez caracteres
Este exemplo ativa as unições SQL para uma pesquisa por fórmula específica:
$valorAtual:=Get database parameter(QUERY BY FORMULA Joins)
SET DATABASE PARAMETER(QUERY BY FORMULA Joins;2) `Ativar uniões SQL
`Procurar todas as linhas de faturas do cliente "ACME" mesmo que as tabelas não estejam relacionadas
QUERY BY FORMULA([Linha_Faturas];([Linha_Faturas]Id_Fatura=[Faturas]Id & [Faturas]Cliente="ACME"))
SET DATABASE PARAMETER(QUERY BY FORMULA Joins;$valorAtual) `Se restabelece a configuração atual
QUERY
QUERY BY SQL
QUERY SELECTION
QUERY SELECTION BY FORMULA
Produto: 4D
Tema: Pesquisas
Número
48
Modificado: 4D v11 SQL Release 2
Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)