| 4D v15.4QUERY BY FORMULA | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v15.4
 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 omite 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 os dois campos e a segunda parte ([Table_B]field_Y = "abc") define o critèrio de pesquisa (pelo 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.  
Nas versões anteriores de 4D Server, este comando se executava nas máquinas clientes. 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 dezembroEste 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 caracteresEste 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 v15.4)
	
	
	Manual de linguagem 4D ( 4D v15)
	
	
	
	
	Manual de linguagem 4D ( 4D v15.3)
 Adicionar um comentário
Adicionar um comentário