Depois de saber como pode criar, actualizar e apagar dados, eis uma nova entrada na série ORDA. Neste post, verá como pode consultar a sua base de dados num modo orientado para objectos. Com ORDA, as consultas são mais leves, mais legíveis, e pode navegar por todo o modelo de dados usando conceitos orientados para objectos !
Além disso, ORDA torna possível consultar muito facilmente várias tabelas relacionadas, gerir relações recursivas na mesma tabela, e utilizar vários operadores lógicos numa única consulta. Além disso, não tem de se preocupar em estabelecer relações entre tabelas… manual ou automaticamente !
Consulta com o exemplo da DataStore
COMEÇAR COM A CONSULTA DA ORDA
Como quando se faz uma consulta sobre uma tabela, a consulta com ORDA é feita sobre um dataclass (que corresponde a uma tabela).
Há várias maneiras de consultar um dataclass. O seguinte fornece uma rápida visão geral. Para informação mais aprofundada sobre a query() método, verificar a documentação.
1- Fornecer a consulta como uma única corda
Aqui está uma pergunta para obter todos os empregados cujo primeiro nome começa com ‘S’:
C_OBJECT($employees)
“)
$employees :=ds.Employee.query("firstName='S@' // Query on Employee table
2- Fornecer a consulta e os valores separadamente, utilizando marcadores de lugar
Agora, digamos que queres ter todos os empregados cujo primeiro nome comece com ‘D’ ou ‘E’. Note-se que os valores a aplicar são compensados na consulta e são referidos com :1, :2, … :n, como se mostra abaixo:
C_OBJECT($employees)
)
$employees :=ds.Employee.query("firstName=:1 ou firstName=:2"; "D@"; "E@" // Query on Employee table
Variação: Também se pode utilizar os marcadores de lugar através de uma colecção para fornecer os valores. Como o exemplo abaixo demonstra:
C_OBJECT($employees;$params)
// You can use a collection to provide values to apply in the query
$params:=New object
$params .
parameters:=New collection("D@"; "E@")
$employees :=ds.Employee.query("firstName=:1 ou firstName=:2";$params) // Query on Employee table
algumas regalias da nova forma de consulta
UTILIZAR FACILMENTE UMA LIGAÇÃO RECURSIVA NUMA ÚNICA TABELA
Considere esta ligação recursiva na tabela “Empregado”:
Usando a forma clássica
Este código solicita todos os empregados cujo primeiro nome comece com a letra ‘A’, com um gerente com um apelido que comece com a letra ‘S’:
ARRAY LONGINT(_managersIDs;0)
;
QUERY ([Empregado];[Empregado]primeiroNome;"="; "A@")
CREATE SET ([Empregado]; "a")
QUERY ([Empregado];[Empregado]últimoNome;"=""S@")
SELECTION TO ARRAY ([Empregado]ID;_identificação de gestores)
QUERY WITH ARRAY ([Empregado]ID de gestores;_identificação de gestores)
CREATE SET ([Empregado]; "s")
INTERSECTION ("a"; "s"; "resultado")
USE SET ("
resultado")
CLEAR SET ("a")
CLEAR SET ("s")
usando orda
Esta pergunta é muito mais leve…
C_OBJECT($entitySelection)
$entitySelection := ds.Employee.query("firstName=:1 and manager.lastName=:2"; "A@"; "S@")
Não espere … comece já a usar ORDA para código mais curto, mais limpo e mais legível!