I would assume so, they are new with ADO 2.0, which has been around a while. Very
powerful little commands...
Lots of other nice features in ADO, like recordsets you can save and then load and
treat as if it is a standard (live) recordset.
There is lot's to ADO, I just wanted to check out these Hirarchial Record Sets.
Chris
Christopher Crowe (Software Developer)
Microsoft MVP, MCP
Adrock Software
Byte Computer & Software LTD
P.O Box 13-155
Christchurch
New Zealand
Phone/Fax (NZ) 03-3651-112
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On
> Behalf Of Grant Black
> Sent: Friday, 4 June 1999 12:19
> To: Multiple recipients of list delphi
> Subject: RE: [DUG]: ADO Hierarchial Record Sets
>
>
> > -----Original Message-----
> > From: Wilfred Verkley [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, June 04, 1999 11:52 AM
> > To: Multiple recipients of list delphi
> > Subject: RE: [DUG]: ADO Hierarchial Record Sets
> >
> >
> > Does anyone remember the 1rst Normal Form rule? If Codd were
> > dead, he would be turning in his grave.
>
> More to the point, I can't remember ever seeing 'SHAPE' and 'RELATE' in
> my SQL text book (by C.J. Date). I take it they are 'extensions' to SQL
> 92?
>
> > -----Original Message-----
> > From: Chris Crowe [mailto:[EMAIL PROTECTED]]
> > Sent: Thursday, 3 June 1999 08:27
> > To: Multiple recipients of list delphi
> > Subject: RE: [DUG]: ADO Hierarchial Record Sets
> >
> >
> > The idea behind the ADO hierarchial record sets is this.
> >
> > Say you have customers
> >
> > and you have Current Orders
> >
> > and you have Old Orders
> >
> > You can run a query (odd as it may seem, but very powerful)
> >
> > SHAPE {SELECT * FROM customers}
> > APPEND ({SELECT * From orders Where orderdate
> > #1/1/1996# And customerid = ?}
> > RELATE customerid TO PARAMETER 0) AS rsOldOrders,
> > ({SELECT * From orders WHERE orderdate >= #1/1/1996#}
> > RELATE customerid TO customerid) AS rsRecentOrders
> >
> > What you get back is a single record set, of all the
> > customers like a normal
> > Select * from Customers. But there is two extra fields
> > RsOldorders, and
> > rsRecentorders. They are a full record set in their own
> > right. You can then
> > (somehow in delphi) assign the record set to another
> > recordset and use the
> > normal
> >
> > while (X.EOF = FALSE) do
> > ....
> > Movenext
> > end;
> >
> > So you might have Customers, and their orders, and each order
> > has another
> > sub record set, etc..
> >
> > The whole thing is handled via ADO. Puts things like the BDE
> > to shame, well
> > it is new technology.
> >
> > The part I can not get to work in Delphi is assigning the
> > child record set
> > back to a recordset object.
> >
> > in VB this is all you need.
> >
> > Set rsTitle = rsPub!rsOldOrders.Value
> > Do While Not rsTitle.EOF
> > List1.AddItem (" " & rsTitle!orderdate)
> > rsTitle.MoveNext
> > Loop
> > rsTitle.Close
> >
> > here is some VB code which does exactly what I want in Delphi.
> >
> > Private Sub Command2_Click()
> > Dim cn As ADODB.Connection, rsPub As ADODB.Recordset, _
> > rsTitle As ADODB.Recordset, SQL As String, rsRecent As
> > ADODB.Recordset
> > Set cn = New ADODB.Connection
> > Set rsPub = New ADODB.Recordset
> > cn.Provider = "MSDataShape"
> > cn.Open "dsn=OLE_access_NWIND"
> >
> > ' I have a edit field on a VB form which has this SQL code.
> > '
> > ' 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
> >
> >
> > List1.Clear
> >
> > rsPub.Open Me!Text1.Text, cn, adOpenStatic, adLockReadOnly,
> > adCmdText
> > Do While Not rsPub.EOF
> >
> > List1.AddItem ("cUSTOMER " & rsPub!CompanyName)
> >
> > List1.AddItem ("")
> > List1.AddItem (" Old Orders")
> > List1.AddItem (" ==========")
> >
> > Set rsTitle = rsPub!rsOldOrders.Value
> > Do While Not rsTitle.EOF
> > List1.AddItem (" " & rsTitle!orderdate)
> > rsTitle.MoveNext
> > Loop
> > rsTitle.Close
> >
> > List1.AddItem (" ")
> > List1.AddItem (" Recent Orders")
> > List1.AddItem (" =============")
> >
> > Set rsRecent = rsPub!rsRecentOrders.Value
> > Do While Not rsRecent.EOF
> > List1.AddItem (" " & rsRecent!orderdate)
> > rsRecent.MoveNext
> > Loop
> > rsRecent.Close
> >
> > rsPub.MoveNext
> > List1.AddItem ("")
> > Loop
> > rsPub.Close
> > cn.Close
> > Set rsTitle = Nothing
> > Set rsPub = Nothing
> > Set cn = Nothing
> > End Sub
> >
> > Chris
> >
> > --------------------------------------------------------------
> > -------------
> > New Zealand Delphi Users group - Delphi List -
> > [EMAIL PROTECTED]
> > Website: http://www.delphi.org.nz
> >
> > --------------------------------------------------------------
> > -------------
> > New Zealand Delphi Users group - Delphi List -
> > [EMAIL PROTECTED]
> > Website: http://www.delphi.org.nz
> >
> ------------------------------------------------------------------
> ---------
> New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
> Website: http://www.delphi.org.nz
>
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz