Saltar para o conteúdo principal
Versão: 20 R7 BETA

QUERY BY SQL

QUERY BY SQL ( {tabela ;} sqlFormula )

ParâmetroTipoDescrição
tabelaTableTabela para a qual se devolve a seleção de registros ou tabela padrão se o parâmetro for omitido
sqlFormulaTextFórmula válida de pesquisa SQL representando a cláusula WHERE da pesquisa SELECT

Esse comando não é seguro para thread e não pode ser usado em código adequado.

Descrição

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 

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é’")

é equivalente a a pesquisa SQL:

   SELECT * FROM Empregados WHERE "nome=’josé’"

O comando QUERY BY SQL é similar ao comando QUERY BY FORMULA. O comando procura registros na tabela especificada. Modifica a seleção atual de tabela para o processo atual e transforma o primeiro registro da nova seleção no registro atual.

Nota: o comando QUERY BY SQL não pode ser utilizado no contexto de uma conexão SQL externa; ele conecta diretamente ao motor SQL integrado de 4D.

QUERY BY SQL aplica sqlFormula a cada registro da seleção da tabela. sqlFormula é uma expressão booleana que deve devolver True ou False. Como sabe, no padrão SQL, uma condição de pesquisa pode ter um resultado True, False ou NULL. Todos os registros (filas) onde a condição de pesquisa retorna True são incluídas na nova seleção atual.

A expressãosqlFormula pode ser simples, como a comparação de um campo (coluna) com um valor; ou complexa, como um cálculo. Assim como QUERY BY FORMULA, QUERY BY SQL pode avaliar a informação nas tabelas relacionadas (ver o exemplo 4). sqlFormula deve ser uma instrução SQL válida, de acordo com o padrão SQL-2 e relativo às limitações atuais de implementação do SQL em 4D. Para maior informação sobre compatibilidade SQL em 4D, consulte Manual de SQL no manual 4D SQL.
O parâmetrosqlFormula pode utilizar referências a expressões 4D. A Sintaxe a utilizar é a mesma que para os comandos SQL integrados ou o código incluído entre as etiquetas Begin SQL/End SQL, ou seja: <> ou :MinhaVar.

Nota: este comando é compatível com os comandos SET QUERY LIMIT e SET QUERY DESTINATION

Lembrete: as referências às variáveis locais não são possíveis em modo compilado. Para maior informação sobre a programação SQL em 4D, consulte a seção Introdução aos comandos SQL.

Sobre relações

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

Utilizando o comando QUERY BY FORMULA, pode escrever:

 QUERY BY FORMULA([Pessoas];[Cidades]População>1000)

Using

Utilizando QUERY BY SQL, deve escrever a seguinte instrução, independente de se a relação existe ou não:

 QUERY BY SQL([Pessoas];"pessoas.cidade=cidades.nome AND cidades.população>1000")

Nota: QUERY BY SQL trata as relações Um-a-Muitos e Muitos-a-Um de uma maneira diferente que QUERY BY FORMULA.

Exemplo 1

Este exemplo mostra os escritórios com vendas superiores a 100. A pesquisa SQL é:

   SELECT *      FROM Escritorios      WHERE Vendas > 100

Utilizando o comando QUERY BY SQL:

 C_STRING(30;$formulaPesquisa)
 $formulaPesquisa:="Vendas > 100"
 QUERY BY SQL([Escritorios];$formulaPesquisa)

Exemplo 2

Este exemplo mostra as ordens entre 3.000 e 4.000. A pesquisa SQL é:

   SELECT *      FROM Ordens      WHERE Quantidade BETWEEN 3000 AND 4000

Utilizando o comando QUERY BY SQL:

 C_STRING(40;$formulaPesquisa)
 $formulaPesquisa:="Quantidade BETWEEN 3000 AND 4000"
 QUERY BY SQL([Ordens];$formulaPesquisa)

Exemplo 3

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 Nome

Utilizando o comando QUERY BY SQL:

 C_STRING(40;$formulaPesquisa)
 $formulaPesquisa:="Cidade= ‘Paris’ ORDER BY Nome"
 QUERY BY SQL([Pessoas];$formulaPesquisa)

Exemplo 4

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)

Existe uma relação Muitos-a-Um de [Linhas_Faturas]ID_Fat com [Faturas]ID_Fat.

Utilizando o comando QUERY BY FORMULA, pode escrever:

 QUERY BY FORMULA([Linhas_Faturas];([Linhas_Faturas]Codigo="FX-200") & (Month of([Faturas]Data_Fat)=4))

A pesquisa SQL é:

   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

Quando utilizar o comando QUERY BY SQL:

 C_STRING(40;$formulaPesquisa)$formulaPesquisa:="Linhas_Faturas.ID_Fat=Faturas.ID_FatAND Linhas_Faturas.Codigo=’FX-200’ AND MONTH(Faturas.Data_Fat)=4" 

Variáveis e conjuntos do sistema

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.

Ver também

QUERY BY FORMULA