> -----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

Reply via email to