8 |
The LA Fox Developer Newsletter
|
June 2000
|
ADO Jumpstart
(Con’t from page 7)
Andrew
Puller
Vice
President, Sales
Nancy Davolio
Sales Representative
Janet
Leverling
Sales Representative
Margaret
Peacock
Sales
Representative
St even
Buchanan
Sales Manager
Laura
Callahan
Inside
Sales
Coordinator Steven
Buchanan
Sales
Manager
Michael Suyaaa Sales Representative
Robert
King
Sales Representative
Anne
Dodsworth
Sales Representative
Finally, note that hierarchical recordsets are updateable. The following code expands the previous example to illustrate how to make a simple update:
Do While !oRecordset.Eof
oStaff
=
oRecordset.Fields(”staff”).Value
If oStaff.Recordcount> 0
With oRecordset
Do While !oStaff.Eof
With oStaff
.Fields(”firstname”).Value
=;
Upper(.Fields(”firstname”).Value)
.Fields(”Iastname”).Vatue
=;
Upper(.Fields(”lastname”).Value)
.Fields(”Title”).Value
Upper(.Fields(”Title”).Vatue)
EndWith
oStaff.MoveNext
EndDo
~I
Write changes to Staff recordset
oStaff.UpdateBatch
End With
Endif
oRecordset.MoveNext
EndDo
The ability to view related records, coupled with the ability to make updates, places the ADO hierarchical recordset capability on par with similar capabilities in Visual FoxPro.
Multiple Recordsets
Use of hierarchical recordsets represents only one method for returning data from multiple recordsets in one object. For starters, building hierarchical recordsets is not the most straightforward of propositions. In many cases, a simpler alternative may be all that is required.
Consider the case where you need a specific customer record and the orders for that customer. Yes, you could use a hierarchical recordset. But, there is a simpler way: run
two
SQL statements.
Some OLE DB providers can process multiple SQL Statements.
The OLE DB Provider for SQL Server has this capability.
Attempting to do this with Visual FoxPro tables via the OLE DB
Provider for ODBC will not work.
When using this technique, you have
two
choices on where the logic exists to perform the task.
|
One choice is to build the SQL on the client and pass it to the server through a Command object.
The other choice is to invoke a stored procedure on the database server through a Command object. I’ll illustrate both
techniques. The Command object will be discussed in detail later in this paper.
To illustrate the stored procedure method, the following stored procedure must be created on the SQL Server Northwind
database:
CREATE PROCEDURE CustomerAndOrders @CustomerlD nchar(5)
AS Select
*
From Customers Where Customers.CustomerlD
=
@CustomerlD
Select
*
From Orders Where Orders.CustomerlD
=
@customerlD
With the stored procedure created, the following code will create the recordset:
#lnclude adovfp.h
oConnection
=
CreateObject(”adodb.connection”) oCommand
=
CreateObject(”adodb.command”)
With oConnection
.Provider
=
“SQLOLEDB.1”
.ConnectionString
;
“Persist Security lnfo=False;User lDsa;lnitial
Catalog=Northwind;Data Source=JVP”
.Open
EndWith
With oCommand
.Commandlext
=
“CustomerAndOrders” .ActiveConnection
=
oConnection
.CommandType
=
adCmdStoredProc End With
oCommand.Parameters(”@CustomerlD”).Value
=
“ALFKI” oRecordset
=
oCommand.Execute
Do While !oRecordset.Eof
?oRecordset.Fields(1).Value
oRecordset.MoveNext
EndDo
oRecordset
=
oRecordset.NextRecordset
Do While IoRecordset.Eof
?oRecordset.Fields(O).Value
oRecordset.MoveNext
EndDo
ALIREDS
FUTTEPKISTR
1.0643
10692
10702
10835
10952
11011
Like any recordset, the recordset just produced can be navigated. Once the first set of records from the Customers table have been navigated, the NextRecordset method is invoked.
|
Page 8
|
8 |