ID Artikel: 189657 - Kajian Terakhir: 20 September 2011 - Revisi: 2.0 Cara menggunakan perintah bentuk ADO
Pada Halaman iniRINGKASAN Artikel ini menjelaskan ADO BENTUK sintaks untuk memproduksi hirarkis recordsets, perintah dan
menjelaskan cara untuk melintasi recordsets hirarkis. VBA sampel kode adalah juga
disediakan. INFORMASI LEBIH LANJUT Anda dapat menggunakan recordsets hirarkis sebagai alternatif
JOIN dan GROUP BY sintaks ketika Anda perlu untuk mengakses orangtua-anak dan ringkasan
data. Recordsets hirarkis yang digunakan dalam banyak produk: Xbase produk menggunakan perintah SET hubungan, akses menggunakan "Tersegmentasi Virtual tabel" secara internal untuk laporan dengan tingkat pengelompokan, dan sebagainya. Hirarki memberikan kemampuan untuk membangun satu atau beberapa recordsets, mendefinisikan kelompok, dan menentukan agregat perhitungan atas anak recordsets. Meskipun Anda dapat menerapkan fungsi yang sama melalui kode, fungsi ini pergeseran banyak biasa bekerja dari pengembang ke sistem. Hirarkis recordsets tersedia melalui penyedia MSDataShape, yang diimplementasikan oleh mesin kursor klien. Hirarkis recordsets berbeda dari SQL BERGABUNG dan KELOMPOK OLEH pernyataan dalam bahwa dengan BERGABUNG, bidang tabel orangtua dan anak bidang tabel diwakili dalam recordset sama. Dengan recordset hirarkis, recordset berisi hanya bidang dari tabel orangtua. Selain itu, recordset berisi bidang tambahan yang mewakili data terkait anak, yang dapat Anda tetapkan untuk kedua recordset variabel dan melintasi. Ketika Anda melakukan fungsi agregat menggunakan KELOMPOK OLEH dan agregat operator, hanya agregat nilai muncul di Recordset. Dengan hirarkis recordsets, nilai-nilai agregat diwakili orangtua recordset dan catatan detail adalah anak Recordset. Anda dapat membuat tiga jenis bentuk, dan setiap jenis memiliki kekuatan dan kelemahan sendiri. Anda harus memilih mekanisme yang terbaik sesuai dengan kebutuhan aplikasi Anda dan lingkungan Anda akan berjalan Anda aplikasi. Jenis-jenis BENTUK adalah sebagai berikut:
Pada awalnya, hierarki berdasarkan parameter hanya membaca Parent catatan dan mengambil anak catatan pada permintaan. Meskipun awal overhead dikurangi, Anda harus mengeluarkan permintaan anak baru untuk setiap orangtua record yang diakses, dan Anda harus mempertahankan sambungan ke sumber data untuk sebagai selama recordset ini terbuka. Hierarki berdasarkan grup adalah pernyataan SQL setara dengan memproduksi agregat bergabung dengan detail SQL pernyataan atau melakukan fungsi agregat pada non-dinormalisasi data. Anda tidak dapat memperbarui kolom ringkasan dan kolom dihitung karena mereka mungkin berasal dari lebih dari satu catatan. Seperti berbasis hubungan hirarki, semua catatan harus membaca di depan. Recordsets hirarkis yang dibuat tersedia oleh BENTUK klausa. Sintaks sederhana disediakan pertama, kemudian contoh dengan diagram. Karena BENTUK sintaks dapat mendapatkan cukup kompleks, tata-bahasa formal untuk bentuk klausul ini disediakan di akhir artikel untuk memungkinkan Anda untuk memperluas contoh. Anda juga dapat menggunakan program pada akhir artikel ini untuk menguji Anda sendiri BENTUK pernyataan. Contoh menggunakan tabel dari sampel Northwind database. Sintaks sederhanaCATATAN:
ContohHirarki hubungan sederhana:
SHAPE {select * from customers}
APPEND ({select * from orders} AS rsOrders
RELATE customerid TO customerid)
Customers.*
rsOrders
|
+----Orders.*
Hirarki parameterized:
SHAPE {select * from customers}
APPEND ({select * from orders where customerid = ?} AS rsOrders
RELATE customerid TO PARAMETER 0)
Senyawa hubungan hirarki:Contoh ini menggambarkan tiga tingkat hirarki pelanggan, Order, dan urutan rincian:
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].*
Beberapa hubungan hirarki:Contoh ini menggambarkan hierarki yang melibatkan recordset orangtua dan dua anak recordsets, salah satunya adalah parameterized:
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.*
Hierarki dengan agregat:
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
Hirarki grup:
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
Hirarki grup dengan agregat:CATATAN: batin BENTUK klausul dalam contoh ini identik dengan pernyataan yang digunakan dalam hierarki dengan contoh agregat.
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
Beberapa kelompok:
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
Grand Total:
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
Hirarki kompleks:Contoh ini menggambarkan hierarki yang berisi satu orangtua rowset, dua anak rowsets, salah satunya adalah parameterized, dan kelompok detail.
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
Orangtua dikelompokkan terkait dikelompokkan anak:
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
BENTUK klausul tata bahasa 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.
Program tes bentuk VBABerikut kode program VBA memungkinkan Anda ketik Anda sendiri BENTUK perintah dan menampilkan hirarki lapangan atau menunjukkan lokasi kesalahan sintaks.PERINGATAN: GUNAKAN KODE YANG TERSEDIA DI DALAM ARTIKEL INI RISIKO ANDA SENDIRI. Microsoft menyediakan kode ini "sebagaimana adanya" tanpa jaminan apapun, baik tersurat maupun tersirat, termasuk namun tidak terbatas pada garansi tersirat keadaan yang dapat diperjualbelikan atau kesesuaian untuk tujuan tertentu.
Parameter terlalu sedikit. N diharapkan. REFERENSI ADO 2.0 hirarkis kursor spesifikasi Untuk informasi tambahan tentang BENTUK MENAMBAHKAN sintaks dan bagaimana untuk melewati hirarkis recordsets, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft: 185425
(http://support.microsoft.com/kb/185425/EN-US/
)
ADO hirarkis Recordsets melalui bentuk MENAMBAHKAN melalui C + +/ VBA/Jawa
Penerjemahan MesinPENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah. Klik disini untuk melihat versi Inggris dari artikel ini:189657
(http://support.microsoft.com/kb/189657/en-us/
)
| Sumber Lain Situs Pendukung Lain
KomunitasTerjemahan Artikel
|






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



Kembali ke atas