Cláusula de cálculo de forma

Aplica-se ao: Access 2013, Office 2013

Uma cláusula COMPUTE de forma gera um Recordset pai, cujas colunas consistem em uma referência ao Recordset filho; colunas opcionais cujo conteúdo são colunas de capítulo, colunas novas ou colunas calculadas, ou o resultado da execução de funções agregadas no Recordset filho ou em um Recordset com formato anterior; e todas as colunas do Recordset filho listado na cláusula BY opcional.

Sintaxe

 
SHAPE child-command [AS] child-alias 
   COMPUTE child-alias [[AS] name], [appended-column-list] 
   [BY grp-field-list] 

Descrição

As partes dessa cláusula são as seguintes:

  • child-command

    • Consiste em um dos itens a seguir:

      • Um comando de consulta entre chaves ("{}") que retorna um objeto Recordset filho. O comando é emitido para o provedor de dados subjacente, e sua sintaxe depende dos requisitos desse provedor. Em geral, será usada a linguagem SQL, embora o ADO não exija nenhuma linguagem de consulta específica.

      • O nome de um Recordset com formato existente.

      • Um outro comando shape.

      • A palavra-chave TABLE, seguida do nome de uma tabela no provedor de dados.

  • child-alias

    • Um alias usado para se referir ao Recordset retornado por child-command. O child-alias é necessário na lista de colunas na cláusula COMPUTE e define a relação entre os objetos Recordset pai e filho.
  • appended-column-list

    • Uma lista na qual cada elemento define uma coluna no pai gerado. Cada elemento consiste em uma coluna de capítulo, uma nova coluna, uma coluna calculada ou um valor resultante de uma função de agregação no Recordset filho.
  • grp-field-list

    • Uma lista de colunas nos objetos Recordset pai e filho que especifica o modo de agrupamento das linhas no filho. Para cada coluna em grp-field-list, há uma coluna correspondente nos objetos Recordset pai e filho. Para cada linha no Recordset pai, são exibidos valores exclusivos nas colunas grp-field-list, e o Recordset filho referenciado pela linha pai consiste apenas em linhas filho cujas colunas grp-field-list têm os mesmos valores da linha pai.

Se a cláusula BY for incluída, as linhas do Recordset filho serão agrupadas com base nas colunas na cláusula COMPUTE. O Recordset pai conterá uma linha para cada grupo de linhas no Recordset filho.

Se a cláusula BY for omitida, todo o Recordset filho será tratado como um único grupo e o Recordset pai conterá exatamente uma linha. Essa linha fará referência a todo o Recordset filho. A omissão da cláusula BY permite calcular o "total geral" de agregados em todo o Recordset filho.

Por exemplo:

    SHAPE {select * from Orders} AS orders
       COMPUTE orders, SUM(orders.OrderAmount) as TotalSales

Independentemente do modo de formação do Recordset pai (usando COMPUTE ou APPEND), ele conterá uma coluna de capítulo usada para relacioná-lo a um Recordset filho. Se você desejar, o Recordset pai também poderá conter colunas com agregados (SUM, MIN, MAX etc.) nas linhas filho. Os objetos Recordset pai e filho podem conter colunas com uma expressão na linha de Recordset, bem como colunas novas e inicialmente vazias.

Operação

child-command é emitido para o provedor, que retorna um Recordset filho.

A cláusula COMPUTE especifica as colunas do Recordset pai, que pode ser uma referência ao Recordset filho, um ou mais agregados, uma expressão calculada ou novas colunas. Se houver uma cláusula BY, as colunas definidas por ela também serão acrescentadas ao Recordset pai. A cláusula BY especifica o modo de agrupamento do Recordset filho.

Por exemplo, suponha que você tenha uma tabela — Demografia — contendo os campos Estado, Cidade e População (os números referentes à população são apenas para fins ilustrativos).

Estado

Cidade

População

WA

Seattle

700.000

OU

Medford

200.000

OU

Portland

400.000

CA

Los Angeles

800,000

CA

San Diego

600.000

WA

Tacoma

US$ 500.000

OU

Corvallis

300,000

Agora, emita este comando shape:

 
rst.Open  "SHAPE {select * from demographics} AS rs "  & _ 
          "COMPUTE rs, SUM(rs.population) BY state", _ 
           objConnection 

O comando abre um Recordset com formato de dois níveis. O nível pai é um Recordset gerado com uma coluna agregada (SUM(rs.population) ), uma coluna que faz referência ao Recordset filho (rs) e uma coluna para agrupar o Recordset filho (state). O nível filho é o Recordset retornado pelo comando query (), uma coluna que faz referência ao Recordset filho (rs ) e uma coluna para agrupar o Recordset filho (state ). O nível filho é o Recordset retornado pelo comando query (select * from demographics ).

As linhas de detalhes do conjunto de registros filho serão agrupadas por estado, mas, caso contrário, sem uma ordem específica. Ou seja, os grupos não estarão em ordem alfabética ou numérica. Se você quiser que o Recordset pai seja ordenado, poderá usar o método RecordsetSort para ordenar o Recordset pai.

Agora, você pode navegar pelo Recordset pai aberto e acessar os objetos Recordset filho de detalhes. Para obter mais informações, consulte Acessando linhas em um conjunto de registros hierárquico.

Conjuntos de registros de detalhes pai e filho resultantes

Parent

SUM (rs.Population)

RS

Estado

1,300,000

Referência ao filho1

CA

1.200.000

Referência ao filho2

WA

1,100,000

Referência ao filho3

OU

Criança1

Estado

Cidade

População

CA

Los Angeles

800,000

CA

San Diego

600.000

Child2

Estado

Cidade

População

WA

Seattle

700.000

WA

Tacoma

US$ 500.000

Child3

Estado

Cidade

População

OU

Medford

200.000

OU

Portland

400.000

OU

Corvallis

300,000