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]

Reply via email to