These austrian guys have a nice tutorial posted on it with downloadable sample code:
http://www.keashsoft.com/dbvirtualtree/ Dave I got it to work w/ master/detail and it's instantaneous. --- On Sun, 3/8/09, Perry Kappetein <[email protected]> wrote: From: Perry Kappetein <[email protected]> Subject: [delphi-en] Problem with Database and Virtual Tree To: [email protected] Date: Sunday, March 8, 2009, 10:32 AM Hello all, I was hoping if someone knows something about Virtual Tree. When I load my records it's putting it on the screen one by one, I used to have a for next loop where it was loading al the records, but was taking 7-10 seconds to load, while it suppose to be instantly this is what it is now, and hope somebody could help me. thanks so much Perry unit dsmain; interface uses Windows, Messages, SysUtils, Controls, Forms, Dialogs,StdCtrls, ShellAPI, IniFiles, ComCtrls, ExtCtrls, DB,VirtualTrees, registry, FileCtrl, ABSMain, Classes; type PTreeData = ^TnodeData; Tnodedata = record myrom : integer; romnumber : string; romname : string; ownrom : integer;//string; location : string; publisher : string; languages : string; serial : string; crc : string; size : string; genre : string; end; TdsmainForm = class(TForm) vtree: TVirtualStringTree; RomDatabase: TABSDatabase; ABSQuery1: TABSQuery; ABSQuery2: TABSQuery; ABSroms: TABSTable; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure vtreeGetText( Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); procedure Button1Click( Sender: TObject); procedure Button2Click( Sender: TObject); procedure vtreeInitNode( Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitSta tes); private { Private declarations } public { Public declarations } { Public declarations } Node: PVirtualNode; Data: PTreeData; end; var dsmainForm : TdsmainForm; {$endregion} implementation {$R *.dfm} procedure TdsmainForm. vtreeGetText( Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var ownr : string; begin Data := Sender.GetNodeData( Node); if assigned(data) then begin if Data.ownrom= 0 then ownr:='' else ownr:='Yes'; case Column of 0: CellText := data.romnumber ; 1: CellText := Data.romname ; 2: CellText := ownr; 3: celltext :=data.location; 4: celltext :=data.publisher; 5: celltext :=data.languages ; 6: celltext :=data.serial ; 7: celltext :=data.crc; 8: celltext :=data.size; 9: celltext :=data.genre; end; end; end; procedure TdsmainForm. vtreeInitNode( Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitSta tes); var tst : string; i : integer; begin tst:='SELECT roms.* ,pic.* FROM roms LEFT JOIN pic ON roms.romnumber = pic.romnumber where roms.romnumber= "'+inttostr( Node.Index) +'" ORDER by romnumber ASC'; absquery1.SQL. Text := tst; absquery1.open ; if absquery1.RecordCou nt <> 0 then begin Data := Sender.GetNodeData( Node); data.romnumber: =Absquery1. fieldbyname( 'romnumber' ).AsString ; data.romname :=Absquery1. fieldbyname( 'romname' ).AsString ; data.location: =Absquery1. fieldbyname( 'location' ).AsString ; data.publisher: =Absquery1. fieldbyname( 'publisher' ).AsString ; data.languages: =Absquery1. fieldbyname( 'languages' ).AsString ; data.serial: =Absquery1. fieldbyname( 'serial') .AsString ; data.crc:=Absquery1 .fieldbyname( 'crc').AsString ; data.size:=Absquery 1.fieldbyname( 'romsize' ).AsString ; data.genre:= Absquery1. fieldbyname( 'genre'). AsString ; end; end; procedure TdsmainForm. Button1Click( Sender: TObject); var tst : string; begin vtree.Clear; vtree.NodeDataSize :=sizeof(Tnodedata) ; vtree.RootNodeCount :=1000; end; procedure TdsmainForm. Button2Click( Sender: TObject); begin vtree.Clear; end; procedure TdsmainForm. FormCreate( Sender: TObject); begin vtree.Header. Columns.Clear; vtree.Header. Columns.add. Text:='ROM' ; vtree.Header. Columns.add. Text:='Title' ; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; vtree.Header. Columns.add. Text:='Own Rom'; romdatabase. DatabaseName := 'DS Organizer data'; absroms.DatabaseNam e := 'DS Organizer data'; absquery2.DatabaseN ame := 'DS Organizer data'; romdatabase. DatabaseName := 'DS Organizer data'; absroms.DatabaseNam e := 'DS Organizer data'; absquery1.DatabaseN ame := 'DS Organizer data'; RomDatabase. Connected: =true; end; end. [Non-text portions of this message have been removed] [Non-text portions of this message have been removed]

