Makale numarası: 189657 - Son Gözden Geçirme: 13 Temmuz 2004 Salı - Gözden geçirme: 1.4 ADO SHAPE komutu nasıl kullanılır?
Bu SayfadaÖzetBu makalede, hiyerarşik kayıt kümeleri üretme ADO SHAPE komutu sözdizimi'ni açıklar ve hiyerarşik kayıt kümeleri geçiş açıklar. VBA örnek kod da sağlanır. Daha fazla bilgiÜst-altöge ve Özet verileri erişmek istediğinizde, hiyerarşik kayıt kümeleri JOIN ve GROUP BY sözdizimi alternatif olarak kullanabilirsiniz. Hiyerarşik kayıt kümeleri çok ürünlerde kullanılır: ürünleri için dahili olarak gruplandırma düzeyine raporlarıyla "Bölümlenmiş sanal tablolar" Access kullanır RELATION SET komutunu kullanın ve benzeri Xbase. Hiyerarşileri, bir veya daha çok kayıt kümeleri olu?turmak gruplandırmaları tanımlayın ve alt kayıt kümesi üzerinde toplam hesaplamalarını belirtmek sağlıyor. Benzer işlevler koduyla uygulamak, ancak bu işlevselliği s?radan iş çoğunu geliştirici sisteme geçirir. Hiyerarşik kayıt kümeleri, istemci imleç altyapısı tarafından uygulanan MSDataShape sağlayıcı aracılığıyla edinilebilir. Bir JOIN ile birlikte, ana tablo alanları ve alt tablo alanları aynı kayıt içinde gösterilir, hiyerarşik kayıt kümeleri SQL JOIN ve GROUP BY deyimlerinden farklı. Sıradüzensel bir recordset ile kayıt yalnızca <a0>üst</a0> tablosundan alanlar içerir. Buna ek olarak, kayıt, ikinci bir recordset değişkenine atayın ve geçiş ilgili alt verisini temsil eden bir fazladan alan içerir. GROUP BY ve toplama işleçleri kullanarak toplama işlevleri gerçekleştirirken, yalnızca toplam değerleri recordset içinde görünür. Hiyerarşik kayıt kümeleri alt recordset ayrıntı kayıtları olan ve toplam değerlerini üst recordset içinde gösterilir. Üç şekiller oluşturabilir ve her tür, kendi güçlü ve zayıf yanları vardır. Uygulamanız, uygulama çalıştırıyor olmanız ortam ve gereksinimlerinize en iyi uyan mekanizması'ı seçmeniz gerekir. SHAPE türleri şunlardır:
Başlangıçta, parametre tabanlı hiyerarşileri yalnızca üst kayıt okunamıyor ve alt kayıtları istek üzerine getirin. Ilk ek yükü azalır, ancak erişilen her üst kaydı için yeni bir alt sorgu kesmeniz gerekir ve kayıt kümesi açık olduğu sürece için veri kaynağı bağlantısı korumalısınız. Ayrıntı için SQL birleştirilmiş bir toplam SQL deyimi üretmek için temel grubu hiyerarşisi eşdeğerdir olmayan normalleştirilmiş verilerini toplama işlevleri gerçekleştiren <a0>deyimi veya</a0>. Bunlar birden fazla kayıt türetilmiş, Özet sütunları ve hesaplanan sütunları güncelleştirilemiyor. Ilişki tabanlı hiyerarşileri gibi tüm kayıtların en fazla ön okumak zorunda. Hiyerarşik kayıt kümeleri SHAPE yan tümcesi ile yeniden kullanılabilir. Ilk olarak, Basitleştirilmiş sözdizimi örnekleri ile diyagramları sonra sağlanır. SHAPE sözdizimi oldukça karmaşık almak için resmi dilbilgisi ŞEKLI için örnekler genişletmenizi izin vermek için bu makalenin sonunda yan tümcesi sağlanır. Program, bu makalenin sonunda kendi SHAPE ifadeleri sınamak için de kullanılabilir. Örnekler, Northwind örnek veritabanındaki tabloları kullanın. Basitleştirilmiş sözdizimiNOTLAR:
ÖrneklerBasit bir Relation hiyerarşisi:
SHAPE {select * from customers}
APPEND ({select * from orders} AS rsOrders
RELATE customerid TO customerid)
Customers.*
rsOrders
|
+----Orders.*
Parametreli sıradüzen:
SHAPE {select * from customers}
APPEND ({select * from orders where customerid = ?} AS rsOrders
RELATE customerid TO PARAMETER 0)
Relation sıradüzeni bileşik:Bu örnekte üç düzeyli sıradüzeni, müşteriler ve Siparişler sipariş ayrıntılarını gösterir:
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].*
Birden çok ilişki hiyerarşisi:Bu örnek biri parametreli bir üst recordset'i ve iki alt kayıt kümesi hiyerarşisini gösterir:
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.*
Hiyerarşi topluluğu:
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
Grup hiyerarşisi için:
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
Grup hiyerarşisi topluluğu olan:Not: Bu örnekte iç SHAPE yan tümce toplu örnekle hiyerarşisinde kullanılan deyime aynıdır.
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
Birden çok grupları:
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
Genel toplamı:
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
Karmaşık hiyerarşisi için:Bu örnek, bir üst satır içeren bir hiyerarşi, biri parametrelenmiştir, iki alt satır kümeleri ve bir grup ayrıntıları gösterir.
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
Gruplandırılmış bir üst gruplandırılmış alt için ilgili:
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
SHAPE yan tümcesi biçimsel dilbilgisi
<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 sınama programıAşağıdaki VBA program kod türü kendi SHAPE komutunu etkinleştirir ve alan hiyerarşisini görüntülemek veya sözdizimi hatası konumunu belirtin.UYARı: Bu MAKALEYI YOUR KENDI RISKI AT KODU SAğLANAN USE. Microsoft, hiçbir garanti, ya da veya zımni, dahil ancak bunlarla sınırlı olmamak satılabilirlik ve/veya belirli bir amaca uygunluk zımni hiçbir garanti olmadan "olduğu gibi", bu kodu sağlar.
Çok az parametre. Beklenen n. ReferanslarADO 2.0 sıradüzensel imleç belirtimi SHAPE APPEND sözdizimi ve hiyerarşik kayıt kümeleri çapraz geçiş yapma hakkında ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın: 185425
(http://support.microsoft.com/kb/185425/EN-US/
)
<a1>ADO</a1> sıradüzensel Recordset üzerinden SHAPE APPEND aracılığıyla C + +/ VBA/Java Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:189657
(http://support.microsoft.com/kb/189657/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri
|






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



Üste