Artigo: 189657 - Última revisão: terça-feira, 13 de Julho de 2004 - Revisão: 1.4 Como utilizar o comando ' SHAPE ADO
Nesta páginaSumárioEste artigo descreve a sintaxe do comando ADO SHAPE para produzir conjuntos de registos hierárquicos e explica como atravessar conjuntos de registos hierárquicos. Exemplo de código VBA também é fornecido. Mais InformaçãoPode utilizar conjuntos de registos hierárquicos como alternativa à sintaxe JOIN e GROUP BY quando precisar de aceder principal-subordinado e dados de sumário. Conjuntos de registos hierárquicos são utilizados em vários produtos: Xbase produtos utilize o comando SET RELATION, Access utiliza "Segmentadas tabelas virtuais" internamente para relatórios com níveis de agrupamento e assim sucessivamente. Hierarquias permitem-lhe para criar um ou vários conjuntos de registos, definir agrupamentos e especificar agregação cálculos sobre conjuntos de registos subordinados. Apesar de pode implementar funcionalidades similares através de código, esta funcionalidade muda grande parte do trabalho mundano do programador para o efeito ao sistema. Conjuntos de registos hierárquicos estão disponíveis através do fornecedor de MSDataShape, é implementado pelo motor do cursor de cliente. Conjuntos de registos hierárquicos diferem das instruções SQL JOIN e GROUP BY que com uma é JOIN , de campos da tabela principal e a campos da tabela subordinada são representados no conjunto de registos mesmo. Com um conjunto de registos hierárquico, o conjunto de registos contém apenas os campos da tabela principal. Além disso, o conjunto de registos contém um campo adicional que representa os dados relacionados subordinados, que pode atribuir a uma segunda variável do conjunto de registos e atravessar. Quando estiver a efectuar funções de agregação utilizando GROUP BY e operadores de agregação, apenas os valores agregados aparecem no conjunto de registos. Com conjuntos de registos hierárquicos, os valores agregados são representados no conjunto de registos principal e os registos de detalhe estão no conjunto de registos subordinado. Pode criar três tipos de formas e cada tipo tem as suas próprias pontos fortes e fracos. Tem de escolher o mecanismo que melhor se adequa as necessidades da sua aplicação e o ambiente que vai executar a aplicação num. Os tipos de SHAPE são:
Inicialmente, hierarquias com o parâmetro apenas ler os registos principal e obter a criança registos a pedido. Apesar da sobrecarga inicial é reduzida, tem que emitir uma nova consulta subordinados para cada registo principal que é acedido e deve manter a ligação à origem de dados para desde que o conjunto de registos é aberto. A hierarquia baseadas em grupos é equivalente a produzir uma agregação instrução de SQL associada a um detalhe SQL instrução ou efectuar funções de agregação de dados não normalizada. Não consegue actualizar as colunas de sumário e as colunas calculadas porque pode ser derivadas de mais do que um registo. Como hierarquias baseadas em relação, todos os registos devem ser lido até à frente. Conjuntos de registos hierárquicos são disponibilizados pela cláusula SHAPE . Sintaxe simplificado é fornecido em primeiro lugar, em seguida, exemplos com diagramas. Uma vez que a sintaxe SHAPE pode obter muito complexa, a gramática formal para o SHAPE cláusula é fornecida no final do artigo para que possa expandir os exemplos. Também pode utilizar o programa no fim deste artigo para testar as suas próprias instruções SHAPE . Os exemplos utilizam tabelas da base de dados de exemplo Adamastor. Sintaxe simplificadaNOTAS:
ExemplosHierarquia de relação simples:
SHAPE {select * from customers}
APPEND ({select * from orders} AS rsOrders
RELATE customerid TO customerid)
Customers.*
rsOrders
|
+----Orders.*
Hierarquia com parâmetros:
SHAPE {select * from customers}
APPEND ({select * from orders where customerid = ?} AS rsOrders
RELATE customerid TO PARAMETER 0)
Composto hierarquia de relação:Este exemplo ilustra uma hierarquia de três níveis de clientes, encomendas e detalhes da encomenda:
SHAPE {SELECT * from customers}
APPEND ((SHAPE {select * from orders}
APPEND ({select * from [order details]} AS rsDetails
RELATE orderid TO orderid)) AS rsOrders
RELATE customerid TO customerid)
Customers.*
rsOrders
|
+----Orders.*
rsDetails
|
+----[Order Details].*
Vários hierarquia de relação:Este exemplo ilustra uma hierarquia que envolvem um conjunto de registos principal e dois conjuntos de registos de subordinados, um dos quais é parametrizado:
SHAPE {SELECT * FROM customers}
APPEND ({SELECT *
FROM orders
WHERE orderdate < #1/1/1998# AND customerid = ?}
RELATE customerid TO PARAMETER 0) AS rsOldOrders,
({SELECT *
FROM orders
WHERE orderdate >= #1/1/1998#}
RELATE customerid TO customerid) AS rsRecentOrders
Customers.*
rsOldOrders
|
+----Orders.*
rsRecentOrders
|
+----Orders.*
Hierarquia com agregado:
SHAPE (select * from orders}
APPEND ({select od.orderid, od.UnitPrice * od.quantity as ExtendedPrice
from [order details] As od}
RELATE orderid TO orderid) As rsDetails,
SUM(ExtendedPrice) AS OrderTotal
Orders.*
rsDetails
|
+----orderid
ExtendedPrice
OrderTotal
Hierarquia de grupo:
SHAPE {select customers.customerid AS cust_id, orders.*
from customers inner join orders
on customers.customerid = orders.customerid} AS rsOrders
COMPUTE rsOrders BY cust_id
rsOrders
|
+----cust_id
Orders.*
cust_id
Hierarquia de grupo com agregado:Nota : A cláusula interna SHAPE neste exemplo é idêntica à instrução utilizada na hierarquia com o exemplo de agregação.
SHAPE
(SHAPE {select customers.*, orders.orderid, orders.orderdate
from customers inner join orders
on customers.customerid = orders.customerid}
APPEND ({select od.orderid,
od.unitprice * od.quantity as ExtendedPrice
from [order details] as od} AS rsDetails
RELATE orderid TO orderid),
SUM(rsDetails.ExtendedPrice) AS OrderTotal) AS rsOrders
COMPUTE rsOrders,
SUM(rsOrders.OrderTotal) AS CustTotal,
ANY(rsOrders.contactname) AS Contact
BY customerid
rsOrders
|
+----Customers.*
orderid
orderdate
rsDetails
|
+----orderid
ExtendedPrice
OrderTotal
CustomerTotal
Contact
customerid
Múltiplos agrupamentos de par:
SHAPE
(SHAPE {select customers.*,
od.unitprice * od.quantity as ExtendedPrice
from (customers inner join orders
on customers.customerid = orders.customerid) inner join
[order details] as od on orders.orderid = od.orderid}
AS rsDetail
COMPUTE ANY(rsDetail.contactname) AS Contact,
ANY(rsDetail.region) AS Region,
SUM(rsDetail.ExtendedPrice) AS CustTotal,
rsDetail
BY customerid) AS rsCustSummary
COMPUTE rsCustSummary
BY Region
rsCustSummary
|
+-----Contact
Region
CustTotal
rsDetail
|
+----Customers.*
ExtendedPrice
customerid
Region
Total geral:
SHAPE
(SHAPE {select customers.*,
od.unitprice * od.quantity as ExtendedPrice
from (customers inner join orders
on customers.customerid = orders.customerid) inner join
[order details] as od on orders.orderid = od.orderid}
AS rsDetail
COMPUTE ANY(rsDetail.contactname) AS Contact,
SUM(rsDetail.ExtendedPrice) AS CustTotal,
rsDetail
BY customerid) AS rsCustSummary
COMPUTE SUM(rsCustSummary.CustTotal) As GrandTotal,
rsCustSummary
GrandTotal
rsCustSummary
|
+-----Contact
CustTotal
rsDetail
|
+----Customers.*
ExtendedPrice
customerid
Hierarquia complexa:Este exemplo ilustra uma hierarquia que contém um conjunto de linhas principais, conjuntos de dois subordinados linhas, um dos quais é parametrizado, e um detalhe de grupo.
SHAPE {select customers.* from customers} AS rsDetail
COMPUTE rsDetail,
ANY(rsDetail.companyname) AS Company,
({select * from orders where customerid = ?}
RELATE customerid TO PARAMETER 0) AS rsOrders,
COUNT(rsOrders.orderid) AS OrderCount
BY customerid
rsDetail
|
+----Customers.*
Company
rsOrders
|
+----Orders.*
OrderCount
customerid
Principal agrupado relativas a subordinado agrupado:
SHAPE
(SHAPE {select * from customers}
APPEND ((SHAPE {select orders.*, year(orderdate) as OrderYear,
month(orderdate) as OrderMonth
from orders} AS rsOrders
COMPUTE rsOrders
BY customerid, OrderYear, OrderMonth)
RELATE customerid TO customerid) AS rsOrdByMonth )
AS rsCustomers
COMPUTE rsCustomers
BY region
rsCustomers
|
+-----customers.*
rsOrdByMonth
|
+-----rsOrders
|
+---- Orders.*
customerid
OrderYear
OrderMonth
region
Cláusula SHAPE formal gramática
<shape-command> ::= SHAPE <table-exp> [AS <alias>]
[<shape_action>]
<shape-action> ::= APPEND <aliased-field-list>
| COMPUTE <aliased-field-list>
[BY <field-list>]
| BY <field-list>
<table-exp> ::= {<native-sql-statement>}
| ( <shape-command> )
<aliased-field-list> ::= <aliased-field> [, <aliased-field...]
<aliased-field> ::= <field-exp> [AS <alias>]
<field-exp> ::= ( <relation-exp> ) | <calculated-exp>
<relation_exp> ::= <table-exp> [AS <alias>] RELATE
<relation-cond-list>
<relation-cond-list> ::= <relation-cond> [, <relation-cond>...]
<relation-cond> ::= <field-name> TO <child-ref>
<child-ref> ::= <field-name> | PARAMETER <param-ref>
<param-ref> ::= <name> | <number>
<field-list> ::= <field-name [, <filed-name>]
<calculated-exp> ::= SUM (<qualified-field-name>)
| AVG (<qualified-field-name>)
| MIN (<qualified-field-name>)
| MAX (<qualified-field-name>)
| COUNT (<alias>)
| SDEV (<qualified-field-name>)
| ANY (<qualified-field-name>)
| CALC (<expression>)
<qualified-field-name>::= <alias>.<field-name> | <field-name>
<alias> ::= <quoted-name>
<field-name> ::= <quoted-name>
<quoted-name> ::= "<string>" | '<string>' | <name>
<name> ::= alpha [ alpha | digit | _ | # ...]
<number> ::= digit [digit...]
<string> ::= unicode-char [unicode-char...]
<expression> ::= an expression recognized by the Jet
Expression service whose operands are
other non-CALC columns in the same row.
Programas de teste SHAPE VBAO seguinte código de programa do VBA permite escrever nos seus próprios comandos SHAPE e mostrar a hierarquia de campo ou indicar a localização do erro de sintaxe.aviso : USE O código fornecido neste artigo AT YOUR próprio riscos. A Microsoft fornece este código "tal como está" sem garantias de qualquer tipo, expressas ou implícita, incluindo sem limitação as garantias implícitas de comercialização e/ou adequação a um fim específico.
Muito poucos parâmetros. N esperado. ReferênciasADO 2.0 hierárquica especificação do cursor Para obter informações adicionais sobre sintaxe SHAPE APPEND e a atravessar conjuntos de registos hierárquicos, consulte o seguinte artigo na base de dados de conhecimento da Microsoft: 185425
(http://support.microsoft.com/kb/185425/EN-US/
)
ADO hierárquica conjuntos de registos através de APPEND SHAPE através de C + + / VBA/Java A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 189657
(http://support.microsoft.com/kb/189657/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções de Artigos
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Voltar ao topo