Einzelnen Beitrag anzeigen

Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#4

Re: VirtualStringTree und Query

  Alt 14. Sep 2004, 20:57
Ich habe das so gelöst:

Code:
procedure TForm17.TreeView1Change(Sender: TObject; Node: TTreeNode); //Ich habe eine Treeview, wenn ich da was ändere, werden die Daten, entsprechend der Query geändert
var
  TreeObject : TTreeDataClass;
  Wurzel    : PVirtualNode;
  i         : Integer;
Begin
VST1.Header.Columns.Clear;

//---------------- Mandanten ---------------------------------------------------

  If Treeview1.Selected.Text = 'Mandanten' then
    Begin
    LB1.Enabled:= true;
    VST1.TreeOptions.PaintOptions:= VST1.TreeOptions.PaintOptions + [toShowTreeLines];
      With Form1.QSeaMand Do
        Begin
          close;
          SQL.Clear;
          SQL.Text:= 'Select Mand.*, DMand.DMIDRSV, '
                    +'DMand.DMIDHPF, DMand.DMRSV, DMand.DMHPF '
                    +'From "'+DBPath+DBDMandName+'" DMand '
                    +'LEFT JOIN "'+DBPath+DBMandName+'" Mand '
                    +'ON (Mand.MID = DMand.DMID) '
                    +'WHERE (DMand.DAAkz = "'+SAKz.Text+'")'; //hier die SQL-Abfrage
          Open;

        For i:= 0 To 9 Do //Hier füge ich die Spalten ein
          VST1.Header.Columns.Add;
        With VST1.Header DO
          Begin
            Columns[0].Text:= 'Vorname'; Columns[0].Width:= 100;
            Columns[1].Text:= 'Name'; Columns[1].Width:= 100;
            Columns[2].Text:= 'Firma'; Columns[2].Width:= 100;
            Columns[3].Text:= 'Strasse'; Columns[3].Width:= 100;
            Columns[4].Text:= 'Wohnhaft'; Columns[4].Width:= 100;
            Columns[5].Text:= 'PLZ'; Columns[5].Width:= 50;
            Columns[6].Text:= 'Ort'; Columns[6].Width:= 100;
            Columns[7].Text:= 'Briefanrede'; Columns[7].Width:= 100;
            Columns[8].Text:= 'Schadensnummer'; Columns[8].Width:= 100;
            Columns[9].Text:= 'VersNr'; Columns[9].Width:= 100; //Breite und Spaltennamen werden zugewiesen
          end; //With VST.Header
            VST1.BeginUpdate;
            VST1.NodeDataSize:= SizeOf(TTreeData);
            VST1.DeleteChildren(VST1.RootNode, True);

        //------------Create Node's---------------------------------------------

          While Not EOF DO
            Begin
              TreeObject:= TTreeDataClass.Create;
              TreeObject.Vorname:= FieldByName('MVorname').AsString;
              TreeObject.Name:= FieldByName('MName').AsString;
              TreeObject.Firma:= FieldByName('MFirma').AsString;
              TreeObject.Strasse:= FieldByName('MStrasse').AsString;
              TreeObject.WohnBei:= FieldByName('MWohnBei').AsString;
              TreeObject.PLZ:= FieldByName('MPLZ').AsString;
              TreeObject.Ort:= FieldByName('MOrt').AsString;
              TreeObject.BAnrede:= FieldByName('MBriefAnrede').AsString;
              Wurzel:= AddVSTObject(VST1, nil,TreeObject); //Die Node aus der SQL-Abfrage werden eingefügt

        //------------Create Root's---------------------------------------------
              if FieldByName('MNameGF1').AsString > '' Then
                Begin
                  TreeObject:= TTreeDataClass.Create;
                  TreeObject.VornameGF1:= FieldByName('MVornameGF1').AsString;
                  TreeObject.NameGF1:= FieldByName('MNameGF1').AsString;
                  TreeObject.StrasseGF1:= FieldByName('MStrasseGF1').AsString;
                  TreeObject.PLZGF1:= FieldByName('MPLZGF1').AsString;
                  TreeObject.Ort:= FieldByName('MOrtGF1').AsString;
                  TreeObject.BAnredeGF1:= FieldByName('MBriefAnredeGF1').AsString;
                  TreeObject.Icon:= 31;
                  AddVSTObject(VST1, Wurzel, TreeObject); //die Root's werden den passenden Node's zugewiesen
                end; // IF MNameGF1 > ''
Code:
Function ADDVSTObject(aVST: TCustomVirtualStringTree; aNode: PVirtualNode;
                      aObject: TObject): PVirtualNode;
var
  Data: PTreeData;
Begin
  Result:= aVST.AddChild(aNode);
  aVST.ValidateNode(Result, False);
  Data:= aVST.GetNodeData(Result);
  Data^.FObject:= aObject;
end;
Die Procedure für die Abfrage kannst Du im Programm an irgend einer Stelle aufrufen. Die Hauptsache ist, dass die Zuweisung in der Procedure GetText richtig sind. In der Procedure werden den Spalten der jeweilige Inhalt aus der Abfrage zugewiesen.

Des Weiteren habe ich die jeweiligen Felder noch seperat wie im dem o.g. Beispiel deklariert.

Ich hoffe es ist halbwegs verständlich.

Du kannst aber auch mal hier im Forum suchen, da gib es schon einiges zu dem Thema.
  Mit Zitat antworten Zitat