When I did this experimentally I used the DirectAccess code unit from Opus,
which is true Delphi source code, rather than OLE. I think they now call it
DirectDAO. They used a Fields property of their Database object, something
like
DbEngine:= CreateEngine(); // create our root DbEngine object
Database:= DbEngine.OpenDatabase( 'C:\My Documents\Northwind.mdb',
False, False, _ );
with Database.OpenRecordset( 'Categories', dbOpenDynaset, _ , _) do
try
while not EOF do begin
for i:= 0 to Fields.Count - 1 do with Fields[i] do try
try
ShowMessage( ' '+ Name+ ' = '+ VarAsType(Value,varString) );
except
ShowMessage( ' '+ Name+ ' = (excepted)' ); // if NULL or
other conv error
end;
finally Free end;
MoveNext;
end {while more};
finally Free end {recordset};
Of course it is much faster than OLE, I assume you are trying something
better than latebound slow OLE calls :)
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On
> Behalf Of Chris Crowe
> Sent: Thursday, 3 June 1999 10:32
> To: Multiple recipients of list delphi
> Subject: [DUG]: ADO Hierarchial Record Sets
>
>
> Below is a simple ADO application which uses Hirarchial Record
> sets. I can not get it to work. In VB you use a syntax like the
> following to get access to the child record set.
>
> Set rsTitle = rsPub!rsOldOrders.Value
>
> So in Delphi I tried
>
> rsoldOrders := rsPub.Fields['rsOldOrders'].Value;
>
> But it will not compile with the error "Incompatible types
> OLEVariant and _Recordset"
>
> Does anyone have any ideas here?
>
> 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
>
> ==================================
> unit AdoSample;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls,
> Forms, Dialogs,
> adodb_tlb,
> StdCtrls, Buttons, ExtCtrls;
>
> type
> TForm1 = class(TForm)
> ListBox1: TListBox;
> Panel1: TPanel;
> BitBtn1: TBitBtn;
> procedure BitBtn1Click(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.BitBtn1Click(Sender: TObject);
> Var
> ADOSql : String;
> cn : Connection;
> rsOldOrders,
> rsPub : Recordset;
> rsTitle : Recordset;
> rsRecent : Recordset;
> SQL : String;
> begin
> Cn := CoConnection.Create;
> cn.Provider := 'MSDataShape';
> cn.Open ('dsn=OLE_access_NWIND','','',0);
>
> rsPub := CoRecordset.Create;
> rsOldOrders := CoRecordset.Create;
>
> ADOSql := '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 ';
>
> rsPub.Open(ADOSql, cn, adOpenStatic, adLockReadOnly, adCmdText);
> ListBox1.items.Clear;
> While (rsPub.EOF= FALSE) do
> begin
> ListBox1.items.Add('Customer =
> '+rsPub.Fields['CompanyName'].Value);
>
> rsoldOrders := rsPub.Fields['rsOldOrders'].Value;
> While (rsoldOrders.EOF= FALSE) do
> begin
> ListBox1.items.Add('
> '+rsOldOrders.Fields['OrderDate'].Value);
> rsOldOrders.Movenext
> end;
> rsOldOrders.Close;
> rsPub.moveNext;
> end;
> rsPub.Close;
>
> end;
>
> end.
>
>
> ------------------------------------------------------------------
> ---------
> 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