4D v16.3

QUERY BY FORMULA

Página Inicial

 
4D v16.3
QUERY BY FORMULA

QUERY BY FORMULA 


 

QUERY BY FORMULA ( tabela {; formula} ) 
Parâmetro Tipo   Descrição
tabela  Tabela in Tabela para a qual retornar a seleção de registros
formula  Booleano in 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.

Nota de compatibilidade: até 4D Server v11, este comando se executava na máquina cliente Por compatibilidade, este funcionamento é conservado nos bancos de dados convertidos a versão 11. Uma preferência de compatibilidade e um seletor do comando SET DATABASE PARAMETER permitem adotar o funcionamento da versão 11 (execução no servidor) nestes bancos de dados.

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



Ver também 

QUERY
QUERY BY SQL
QUERY SELECTION
QUERY SELECTION BY FORMULA

 
PROPRIEDADES 

Produto: 4D
Tema: Pesquisas
Número 48

O comando altera o registro atualO comando altera a seleção atualThis command can be run in preemptive processesComportamento diferente em modo remoto

 
HISTÓRIA 

Modificado: 4D v11 SQL Release 2

 
ARTICLE USAGE

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)