ID do artigo: 189657 - Última revisão: terça-feira, 13 de julho de 2004 - Revisão: 1.4 Como usar o comando de forma ADO
Nesta páginaSumárioEste artigo descreve a sintaxe de comando ADO SHAPE para produzir conjuntos de registros hierárquicos e explica como atravessar conjuntos de registros hierárquicos. Código de exemplo VBA também é fornecido. Mais InformaçõesVocê pode usar conjuntos de registros hierárquicos como uma alternativa para sintaxe JOIN e GROUP BY quando você precisa acessar dados de resumo e pai-filho. Conjuntos de registros hierárquicos são usados em vários produtos: Xbase produtos use o comando SET RELATION, o Access usa "Segmented tabelas virtuais" internamente para relatórios com níveis de agrupamento e assim por diante. Hierarquias lhe dão a capacidade para criar um ou vários conjuntos de registros, definir agrupamentos e especificar cálculos agregados sobre conjuntos de registros filho. Embora você poderia implementar funcionalidade similar através de código, essa funcionalidade desloca grande parte do trabalho comuns do desenvolvedor para o sistema. Conjuntos de registros hierárquicos estão disponíveis através o provedor MSDataShape, que é implementado pelo mecanismo de cursor do cliente. Conjuntos de registros hierárquicos diferem instruções SQL JOIN e GROUP BY que com um JOIN , os campos da tabela pai e filho campos da tabela são representados no mesmo conjunto de registros. Com um conjunto de registros hierárquico, o conjunto de registros contém apenas os campos da tabela pai. Além disso, o conjunto de registros contém um campo extra que representa os dados relacionados filho, que você pode atribuir a uma segunda variável de conjunto de registros e percorrer. Quando você estiver executando funções agregadas usando GROUP BY e operadores agregadas, somente os valores agregados aparecem no conjunto de registros. Com conjuntos de registros hierárquicos, os valores agregados são representados no conjunto de registros pai e os registros de detalhes estão no conjunto de registros filho. Você pode criar três tipos de formas, e cada tipo tem sua própria pontos fortes e fracos. Você precisará escolher o mecanismo que melhor atenda às necessidades do seu aplicativo e do ambiente que é executar seu aplicativo em. Os tipos de SHAPE são da seguinte maneira:
Inicialmente, hierarquias baseadas em parâmetro somente ler os registros pai e buscar o filho registros sob demanda. Embora a sobrecarga inicial é reduzida, você deve emitir uma nova consulta filho para cada registro pai que é acessado e você deve manter a conexão com a fonte de dados para, desde que o conjunto de registros seja aberto. A hierarquia baseada em grupo é equivalente a produzir uma instrução SQL agregada associada a um detalhe SQL instrução ou executando funções agregadas em dados não-normalizados. Você não pode atualizar as colunas de resumo e as colunas calculadas porque pode ser derivados de mais de um registro. Como hierarquias baseadas em relação, todos os registros devem ser lidos antecipadamente. Conjuntos de registros hierárquicos são disponibilizados pela cláusula SHAPE . Sintaxe simplificada é fornecido pela primeira vez, em seguida, exemplos com diagramas. Porque a sintaxe de forma pode obter bastante complexa, a gramática formal para a forma cláusula é fornecida no final do artigo para permitir que você estender os exemplos. Você também pode usar o programa no final deste artigo para testar suas próprias instruções de forma . Os exemplos a usam tabelas do banco de dados de exemplo Northwind. Sintaxe simplificadaOBSERVAÇÕES:
ExemplosHierarquia de relação simples:
SHAPE {select * from customers}
APPEND ({select * from orders} AS rsOrders
RELATE customerid TO customerid)
Customers.*
rsOrders
|
+----Orders.*
Hierarquia parametrizada:
SHAPE {select * from customers}
APPEND ({select * from orders where customerid = ?} AS rsOrders
RELATE customerid TO PARAMETER 0)
Composto Relation hierarquia:Este exemplo ilustra uma hierarquia de três níveis de clientes, pedidos e detalhes do pedido:
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].*
Hierarquia de relação vários:Este exemplo ilustra uma hierarquia envolvendo um conjunto de registros pai e dois conjuntos de registros filho, 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 agregação:
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 agregação:Observação : A cláusula interna SHAPE neste exemplo é idêntica à instrução usada na hierarquia com exemplo Aggregate.
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
Vários agrupamentos:
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 pai, conjuntos de dois filho 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
Pai agrupado relacionados a filho 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 de forma gramática formal
<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.
VBA SHAPE Test ProgramO programa código VBA a seguir permite que você digita em seu próprio comando SHAPE e exibir a hierarquia de campo ou indicar o local do erro de sintaxe.Aviso : USE O código fornecido IN este artigo YOUR próprio risco. A Microsoft fornece esse código "como estão" sem garantia de qualquer tipo, expressa ou implícita, inclusive mas não limitada às garantias implícitas de comercialização e/ou adequação a uma finalidade específica.
Parâmetros insuficientes. N esperado. ReferênciasADO 2.0 hierárquicos especificação de cursor Para obter informações adicionais sobre sintaxe de APPEND SHAPE e como percorrer conjuntos de registros hierárquicos, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft: 185425
(http://support.microsoft.com/kb/185425/EN-US/
)
Conjuntos de registros hierárquicos por meio de SHAPE APPEND via C + ADO / 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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 deste artigo
|






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



Voltar para o início