| 4D v15.4QUERY BY SQL | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v15.4
 QUERY BY SQL 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| QUERY BY SQL ( {tabela ;} sqlFormula ) | ||||||||
| Parâmetro | Tipo | Descrição | ||||||
| tabela | Tabela |   | Tabela para a qual se devolve a seleção de registros ou tabela padrão se o parâmetro for omitido | |||||
| sqlFormula | String |   | Fórmula válida de pesquisa SQL representando a cláusula WHERE da pesquisa SELECT | |||||
O comando QUERY BY SQL permite aproveitar diretamente o motor SQL integrado de 4D. Este comando pode executar um pedido simples SELECT que pode ser escrito desta forma:
   SELECT *
      FROM tabela
      WHERE <sqlFormula>tabela é o nome da tabela passada no primeiro parâmetro e sqlFormula a cadeia de pesquisa passada no segundo parâmetro.
Por exemplo, a seguinte instrução:
 ([Empregados];"nome=’josé’")   SELECT * FROM Empregados WHERE "nome=’josé’"QUERY BY SQL não utiliza relações entre tabelas definidas no editor de estrutura 4D. Se deseja utilizar os dados relacionados, terá que adicionar um JOIN á pesquisa. Por exemplo, assumindo que temos a seguinte estrutura, com uma relação Muitos-a-Um entre os campos [Pessoas]Cidade e [Cidades]Nome:
   [Pessoas] 
      Nome 
      Cidade 
   [Cidades] 
      Nome 
      População QUERY BY FORMULA([Pessoas];[Cidades]População>1000) QUERY BY SQL([Pessoas];"pessoas.cidade=cidades.nome AND cidades.população>1000")Este exemplo mostra os escritórios com vendas superiores a 100. A pesquisa SQL é: 
   SELECT *
      FROM Escritorios
      WHERE Vendas > 100 C_STRING(30;$formulaPesquisa)
 $formulaPesquisa:="Vendas > 100"
 QUERY BY SQL([Escritorios];$formulaPesquisa)Este exemplo mostra as ordens entre 3.000 e 4.000. A pesquisa SQL é: 
   SELECT *
      FROM Ordens
      WHERE Quantidade BETWEEN 3000 AND 4000Utilizando o comando QUERY BY SQL:
 C_STRING(40;$formulaPesquisa)
 $formulaPesquisa:="Quantidade BETWEEN 3000 AND 4000"
 QUERY BY SQL([Ordens];$formulaPesquisa)Este exemplo mostra como obter o resultado da pesquisa ordenado com um critério específico. A pesquisa SQL é: 
 
   SELECT *
      FROM Pessoas
      WHERE Cidade =’Paris’
         ORDER BY NomeUtilizando o comandoQUERY BY SQL:
 C_STRING(40;$formulaPesquisa)
 $formulaPesquisa:="Cidade= ‘Paris’ ORDER BY Nome"
 QUERY BY SQL([Pessoas];$formulaPesquisa)Este exemplo mostra uma pesquisa utilizando tabelas relacionadas em 4D. Em SQL deve utilizar um JOIN para simular esta relação. Suponha que temos as duas tabelas abaixo: 
   [Faturas] com os campos (colunas) seguintes:
      ID_Fact: Inteiro longo
      Data_Fact: Data
      Total: Real
   [Linhas_Faturas] com as seguintes colunas (campos):
      ID_Linea: Inteiro longo
      ID_Fact: Inteiro longo
      Codigo: Alfa (10) QUERY BY FORMULA([Linhas_Faturas];([Linhas_Faturas]Codigo="FX-200") & (Month of([Faturas]Data_Fat)=4))   SELECT ID_Linha
      FROM Linhas_Faturas, Faturas
      WHERE Linhas_Faturas.ID_Fat=Faturas.ID_Fat
         AND Linhas_Faturas.Codigo='FX-200'
         AND MONTH(Faturas.Data_Fat) = 4 C_STRING(40;$formulaPesquisa)$formulaPesquisa:="Linhas_Faturas.ID_Fat=Faturas.ID_FatAND Linhas_Faturas.Codigo=’FX-200’ AND MONTH(Faturas.Data_Fat)=4" Se o formato da condição de pesquisa for correto, a variável Sistema OK assume o valor 1. Do contrário, assume o valor 0, e o resultado do comando será uma seleção vazia e um erro é devolvido. Este erro pode ser interceptado por um método instalado utilizando o comando ON ERR CALL.
 Adicionar um comentário
Adicionar um comentário