4D v16.3QUERY BY SQL |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY SQL
QUERY BY SQL
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 * tabela é o nome da tabela passada no primeiro parâmetro e sqlFormula a cadeia de pesquisa passada no segundo parâmetro. ([Empregados];"nome=’josé’") é equivalente a a pesquisa SQL: SELECT * FROM Empregados WHERE "nome=’josé’" 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ão sqlFormula 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âmetro sqlFormula 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: < 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. 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] Utilizando o comando QUERY BY FORMULA, pode escrever: QUERY BY FORMULA([Pessoas];[Cidades]População>1000) 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. Este exemplo mostra os escritórios com vendas superiores a 100. A pesquisa SQL é: SELECT * Utilizando o comando QUERY BY SQL: C_STRING(30;$formulaPesquisa) Este exemplo mostra as ordens entre 3.000 e 4.000. A pesquisa SQL é: SELECT * Utilizando o comando QUERY BY SQL: C_STRING(40;$formulaPesquisa) Este exemplo mostra como obter o resultado da pesquisa ordenado com um critério específico. A pesquisa SQL é: SELECT * Utilizando o comando QUERY BY SQL: C_STRING(40;$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: 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 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" 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
|
PROPRIEDADES
Produto: 4D HISTÓRIA
Criado por: 4D v11 SQL ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||