4D v15

QUERY BY ATTRIBUTE

Página Inicial

 
4D v15
QUERY BY ATTRIBUTE

QUERY BY ATTRIBUTE 


 

QUERY BY ATTRIBUTE ( umaTabela {; opConj}; campoObjeto ; caminhoAtributo ; operadorPesq ; valor {; *} ) 
Parâmetro Tipo   Descrição
umaTabela  Tabela in Tabela para a qual retorna a seleçao de registros, ou tabela padrao se omitido
opConj  Operador in Operador de Conjunçao para usar para combinar múltiplas pesquisas
campoObjeto  Campo in Campo Objeto para atributos de pesquisa
caminhoAtributo  String in Nome ou caminho do atributo
operadorPesq  Operador, String in Operador de pesquisa (comparador)
valor  Texto, Número, Data, Hora in Valor a comparar
Operador in bandeira de continuar pesquisa

Tema: Pesquisas

QUERY BY ATTRIBUTE localiza os  registros que correspondam com a string de consulta definida utilizando os parâmetros campoObjeto, caminhoAtributo, opPesqvalor e retorna uma seleção de registros para a tabela.

Nota: Para mais informações sobre os
campos Objeto (novos em 4D v15) , por favor, veja Object Field data type.

QUERY BY ATTRIBUTE  altera a seleção atual de tabela para o processo atual e faz o primeiro registro da nova seleção do registro atual. Se o parâmetro tabela for omitido, o comando aplica-se a tabela como padrão. Se você não tiver definido qualquer tabela padrão, ocorre um erro.

O parâmetro opcional opConj é usado para combinar várias chamadas a QUERY BY ATTRIBUTE no caso de várias pesquisas. Os operadores de conjunção disponíveis são o mesmo que o comando QUERY:

ConjunçãoSímbolo a utilizar com QUERY BY ATTRIBUTE

AND

&
OR|
Except#

O parâmetro opConj não é usado para a primeira chamada para QUERY BY ATTRIBUTE de uma consulta múltipla, ou se a pesquisa for uma busca simples. Se você omitir esse parâmetro dentro de uma pesquisa múltipla, o operador AND (&) é usado como padrão.

Em campoObjeto, passe o campo objeto cujos atributos que você deseja pesquisar. Se pertence a uma tabela Um relacionada à tabela com uma relação automática ou manual, o campoObjeto pode pertencer a uma outra tabela.

Em caminhoAtributo, passe o nome ou o caminho do atributo cujos valores deseja comparar. Pode passar um único atributo, por exemplo, "age": nesse caso todos os atributos com o nome serão comparados no registro. Você pode também passar um caminho, por exemplo "children.girls.age", neste caso todos os atributos com este nome serão comparados no registro. Pode também passar um caminho,  por exemplo "children.girls.age", em cujo caso só os atributos coincidentes serão comparados no registro.

Se um atributo "x" for um array, QUERY BY ATTRIBUTE buscará registros que contenham um atributo "x" no qual ao menos um elemento coincida com os critérios. Para buscar em atributos array, é necessário indicar ao comando QUERY BY ATTRIBUTE que o atributo "x" é um array adicionando ".[]" a seu nome em caminhoAtributo (ver exemplo 3).

Notas:

  • Lembre que os nomes de atributos diferenciam entre maiusculas e minúsculas: pode ter diferentes nomes de atributos "MyAtt" e "myAtt" no mesmo registro.
  • Os nomes de atributos são cortados para eliminar espaços adicionais. Por exemplo, "meu primeiro atributo .meu segundo atributo" se interpreta como "meu primeiro atributo.meu segundo atributo".

O parâmetro pesqOp, é o operador de comparação que é aplicado entre campoObjeto e valor. Pode passar um dos símbolos mostrados aqui:

Here is the structure of a query by attribute:

 QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";=;value)

O parâmetro opBusq é o operador de comparação que se aplica entre campoObjeto e valor. Pode passar um dos símbolos que se mostran aqui:
ComparaçãoSímbolo a utilizar com QUERY BY ATTRIBUTE
Igual a =
Diferente de #
Menor que <
Maior que >
Menor ou igual a <=
Maior ou igual a >=

Nota: Você pode especificar o operador de comparação como uma expressão de texto em vez de um símbolo. Consulte a descrição do comando QUERY  para mais informações.

valor  é o dado contra o qual irá comparar caminhoAtributo. O valor pode ser qualquer expressão do mesmo tipo que caminhoAtributo. O valor é avaliado uma vez, no início da busca. O valor não é avaliado para cada registro. Para procurar uma string dentro de uma string (uma procura "contém"), use o sinal de arroba (@) em valor para isolar a string a pesquisar, como mostrado neste exemplo: "@ Smith @". Note-se que, neste caso, a busca apenas parcialmente se benefícia do índice (compacidade de armazenamento de dados).

Esta é a estrutura de uma consulta por atributos:

 QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";=;value)

Nota: Um critério implícito para todos os operadores (exceto #) é que o campo Objeto contém um atributo. Entretanto, para o operador #, pode ser indefinido (ver abaixo).

Com campos objeto, o operador "#" devem ser vistos como selecionando registros onde o campo  "no attribute" contém o valor pesquisado. Neste contexto, 4D considera-o de uma maneira similar:

  • campos onde o valor do atributo é diferente do valor pesquisado,
  • campos onde o atributo não está presente (ou contém um valor Null).
Por exemplo, a seguinte pesquisa retorna registros para pessoas que têm um cachorro cujo nome não é Rex, assim como registros para pessoas que não têm um cachorro, ou que têm um cachorro sem nome:

 QUERY BY ATTRIBUTE([People];[People]Animals;"dog.name";#;"Rex")

Outro exemplo: essa pesquisa retorna todos os registros para os quais [Table]ObjectField contém um objeto o qual possui um atributo attribute1 que é em si mesmo um objeto contendo um atributo attribute2 cujo valor não é value, assim como registros onde o campo objeto não contém attribute1 ou attribute2):

 QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";#;value)

Este princípio também se aplica aos atributos de array. Por exemplo:

 QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations[].city";#;"paris")

Esta pesquisa retornará registros para pessoas que não tem um endereço em Paris.

Para especificamente obter registros onde o atributo não é definido, pode usar um objeto vazio (ver exemplo 2).

Aqui estão as regras a serem seguidas para a construção de várias pesquisas por atributo:

  • A primeira linha não deve conter uma conjunção.
  • Cada argumento de consulta sucessivo pode começar com uma conjunção. Se você omiti-lo, o operador AND (&) é usado por padrão.
  • Todas as linhas, exceto a última, deve usar o parâmetro *.
  • QUERY BY ATTRIBUTE  pode ser combinado com os comandos QUERY (ver exemplo).
  • Para realizar a pesquisar, não especifique o parâmetro * no último comando QUERY BY ATTRIBUTE. Alternativamente, você pode executar o comando QUERY sem parâmetros diferentes à da tabela.

Nota: Cada tabela mantém sua própria construção de pesquisa atual. Isto significa que você pode criar várias consultas simultaneamente, um para cada tabela.

Não importa a forma em que a pesquisa foi definida:

  • Se a operação de busca vai levar algum tempo para ser executada, 4D mostra automaticamente uma mensagem contendo um termômetro de progresso. Estas mensagens podem ser ligados e desligadas usando os comandos MESSAGES ON y MESSAGES OFF. Se um termômetro de progresso for exibido, o usuário pode clicar no botão Parar para parar a pesquisa. Se a consulta for concluída, OK é definido como 1. Caso contrário, se a consulta for interrompida, OK é definido como 0 (zero).
  • Se nenhum campo objeto indexado não for indicado, a pesquisa é otimizada sempre que for possível (campos indexados são procurados primeiro), resultando em uma busca que leva o mínimo de tempo possível.

As datas são armazenadas nos objectos com base nos parâmetros do banco de dados e; por padrão, se considera o fuso horário (veja selector JSON use local time no comando SET DATABASE PARAMETER). 

!1973-05-22!"></span></span><span id="result_box" lang="pt"><span title="[#codeJS]!1973-05-22!">[#codeJS]!1973-05-22! -> "1973-05-21T23:00:00.000Z"

Essa configuração também é considerada durante a busca, assim você não precisa se preocupar com isso, se você usar sempre a sua base no mesmo lugar e se os parâmetros são os mesmos em todos os computadores que acessam os dados. Neste caso, a seguinte busca retorna corretamente os registros cujo atributo é
Birthday  igual a !1973-05-22! (Salvo como"1973-05-21T23:00:00.00Z"):

 QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Birthday";=;!1973-05-22!)

Se você não quiser usar o parâmetro GMT, você pode modificar esses parâmetros com a seguinte declaração:


 SET DATABASE PARAMETER(JSON use local time;0)

Lembnre que o escopo deste parâmetro é limitado ao process.. Se você executar este comando,  01 de outubro de 1965 se armazenará como "1965-10-01T00: 00: 00.000Z", mas você deve definir o mesmo parâmetro antes de iniciar suas pesquisas:

 SET DATABASE PARAMETER(JSON use local time;0)
 QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Birthday";=;!1976-11-27!)

Neste exemplo, o atributo de "age" (idade) é uma string ou um inteiro e queremos encontrar pessoas cujas idades estão entre 20 e 29. As  primeiras duas linhas procuram o atributo como um número inteiro (> = 20 e <30) e as última consultam o campo como uma string (começando com "2", mas é diferente de "2".)

 QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"age";>=;20;*)
 QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"age";<;30;*)
 QUERY BY ATTRIBUTE([Persons];|;[Persons]OB_Info;"age";=;"2@";*)
 QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"age";#;"2") //sem * para lançar a execução

O comando QUERY BY ATTRIBUTE pode ser usado para encontrar registros nos quais alguns atributos são definidos (ou não). Para isso, deve usar um objeto vazio.

  //Pesquisar os registros onde o correio eletrônico é definida no campo objeto
 C_OBJECT($undefined)
 QUERY BY ATTRIBUTE([Persons];[Persons]Info;"email";#;$undefined)

  //Pesquisar os registros onde o CEP- código postal não está definido no campo objeto
 C_OBJECT($undefined)
 QUERY BY ATTRIBUTE([Persons];[Persons]Info;"zip code";=;$undefined)

Nota: Essa sintaxe específica não é ocmpatível com atributos do tipo array. Pesquisar por valores NULL em elementos array dá resultados inválidos.

Você quer encontrar um campo que contém os atributos do array. Com os dois registros a seguir:

{
    "name":"martin",
    "locations" : [ {
                "kind":"office",
                "city":"paris" 
            } ]
} , {
    "name":"smith",
    "locations" : [ {
                "kind":"home",
                "city":"lyon" 
            } , {
                "kind":"office",
                "city":"paris" 
            } ]
}

... QUERY BY ATTRIBUTE encontra pessoas com uma localização "paris" usando este comando:

  //indica o atributo array com a sintaxe ".[]"
 QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].city";=;"paris")
  //Seleciona "martin"e  "smith"

Nota: Se você tiver definido diversos critérios no mesmo atributo array, os critérios coincidentes não se aplicam necessariamente ao mesmo elemento do array. No exemplo a seguir, a pesquisa retornará "smith", porque tem um elemento "locations" cujo "kind" (tipo) é "home" e um elemento "locations", cujas "city" é "paris" Mesmo se esse não for o mesmo elemento:

 QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].kind";=;"home";*)
 QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field;"locations.[].city";=;"paris")
  //Selecciona "smith"



Ver também 

Tipo de dados campo de de Objeto

 
PROPRIEDADES 

Produto: 4D
Tema: Language

 
HISTÓRIA 

 
ARTICLE USAGE

4D v15 - Update (edição standard) ( 4D v15)

Inherited from : QUERY BY ATTRIBUTE ( 4D v15)