Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#59

Re: Datenbank in VirtualTreeView anzeigen und auswerten

  Alt 10. Mär 2009, 22:42
Hallo generic,

Erstmal großes Dankeschön, für die gute Erklärung. Die VSTFüllen, habe ich abgewandelt.

Delphi-Quellcode:
procedure TForm1.VSTFüllen;
var
  Daten : TOMB256PLUS;
begin
if not QryMB256PLUS.Active then
  QryMB256PLUS.Open;
  QryMB256PLUS.filtered := false;
  QryMB256PLUS.filter := '';
  VST.BeginUpdate;
  VST.Clear;


  //VST.NodeDataSize := SizeOf(TOMB256PLUS);



  while not QryMB256PLUS.EOF do
    begin
      Daten := TOMB256PLUS.Create;
      with Daten do
      begin
        Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
        Daten.LfdNr := QryMB256PLUS.FieldByName('LfdNr').AsInteger;
        Daten.Datum := QryMB256PLUS.FieldByName('Datum').AsString;
        Daten.Uhrzeit := QryMB256PLUS.FieldByName('Uhrzeit').AsString;
        Daten.Ereignis := QryMB256PLUS.FieldByName('Ereignis').AsString;
        Daten.Teilnehmer := QryMB256PLUS.FieldByName('Teilnehmer').AsString;
        Daten.Bereich := QryMB256PLUS.FieldByName('Bereich').AsString;
      end;
      VST.AddChild(nil,Daten);
      QryMB256PLUS.Next;
    end;
  VST.EndUpdate;
end;
Allerdings, mit der anderen, denke ich muss das so bleiben. Den Grund dafür, sehe ich, da beim schreiben in die Datenbank, ein ID erzeugt wird. (Generator der Firebird als Zähler).

Delphi-Quellcode:
  //QryMB256PLUS.ParamByName('ID') wird durch die Datenbank erzeugt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
  QryMB256PLUS.ParamByName('LfdNr').AsInteger := Temp1;
  QryMB256PLUS.ParamByName('Datum').AsString := Temp2;
  QryMB256PLUS.ParamByName('Uhrzeit').AsString := Temp3;
  QryMB256PLUS.ParamByName('Ereignis').AsString := Temp4;
  QryMB256PLUS.ParamByName('Teilnehmer').AsString := Temp5;
  QryMB256PLUS.ParamByName('Bereich').AsString := Temp6;
Was für mich bedeuten tut, will ich die ID im VST sehen, muss ich diese ja aus der Datenbankabfragen, Oder?
Delphi-Quellcode:
  VST.BeginUpdate;
  Daten := TOMB256PLUS.Create;
  QryMB256PLUS.Last;
  with Daten do
  begin
    Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
    Daten.LfdNr := QryMB256PLUS.FieldByName('LfdNr').AsInteger;
    Daten.Datum := QryMB256PLUS.FieldByName('Datum').AsString;
    Daten.Uhrzeit := QryMB256PLUS.FieldByName('Uhrzeit').AsString;
    Daten.Ereignis := QryMB256PLUS.FieldByName('Ereignis').AsString;
    Daten.Teilnehmer := QryMB256PLUS.FieldByName('Teilnehmer').AsString;
    Daten.Bereich := QryMB256PLUS.FieldByName('Bereich').AsString;
  end;
  VST.AddChild(nil, Daten);
  VST.ScrollIntoView(VST.GetLast, true);
  VST.EndUpdate;
Da ich keine Zeitprobleme habe, und es kein Problem ist die Datenbank bei Programmstart zu laden, müsste die Variante mit den Objecten ja die bessere sein.

Gibt es den da irgendeine Beschränkung der Anzahl der Datensätz, wo das keinen Sinn mehr macht, oder anders gefragt. Sollte ich das VST auf irgendeine bestimmte Anzahl Datensätze Begrenzen und nur bei Abfrage durch den Kunden die anderen sichbar machen.

Ich denke da an so was...
Delphi-Quellcode:
  Count := QryMB256PLUS.RecordCount-10000;
  QryMB256PLUS.RecNo := Count;

  while not QryMB256PLUS.EOF do
  begin
      Daten := TOMB256PLUS.Create;
      with Daten do
      begin
        Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
        Daten.LfdNr := QryMB256PLUS.FieldByName('LfdNr').AsInteger;
        Daten.Datum := QryMB256PLUS.FieldByName('Datum').AsString;
        Daten.Uhrzeit := QryMB256PLUS.FieldByName('Uhrzeit').AsString;
        Daten.Ereignis := QryMB256PLUS.FieldByName('Ereignis').AsString;
        Daten.Teilnehmer := QryMB256PLUS.FieldByName('Teilnehmer').AsString;
        Daten.Bereich := QryMB256PLUS.FieldByName('Bereich').AsString;
      end;
      VST.AddChild(nil,Daten);
      QryMB256PLUS.Next;
    end;
  VST.EndUpdate;
end;
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat