AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[VST]gemischte Daten aus 2 Tabellen ?

Ein Thema von Hansa · begonnen am 22. Dez 2009 · letzter Beitrag vom 25. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

[VST]gemischte Daten aus 2 Tabellen ?

  Alt 22. Dez 2009, 22:41
Hi,

kurze Frage : kann der VST nur eine Art von Daten aufnehmen, oder auch gemischt ? Es geht um 2 DB-Tabellen. Die eine liefert pro Root-Knoten nur einen String. Wenn der aufgeklappt wird, dann sollen ganz andere Daten angezeigt werden. Soll ich da jetzt alles in einen Record reinhauen oder geht das auch anders ?
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 22. Dez 2009, 23:26
Im Record ein Objekt ablegen und eben unterschiedliche Objekte designen. Dann ist die Unterscheidung leicht möglich und die unterschiedlichen Daten können sinnvoll abgelegt werden.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 22. Dez 2009, 23:41
Sieh an, der kann auch mit Objekten hantieren ? Nur, wie soll denn das mit der Unterscheidung gehen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 00:01
Wieso sollte das nicht gehen?

Beispiel:
Delphi-Quellcode:
type
  TNodeObject = class
    Caption:string;
  end;

  TTableA = class(TNodeObject)
    Name:string;
  end;

  TTableB = class(TNodeObject)
  end;

  TNodeData = record
    Table:TNodeObject;
  end;
  PNodeData = ^TNodeData;

:
:
procedure TForm.OnCreate...
begin
  VST.NodeDataSize := sizeof(TNodeData);
end;

procedure TForm.OnVSTChange(Sender..., Node...
var Data:PNodeData;
begin
  Data:=Sender.GetNodeData(Node);
  if assigend(Data) then begin
    if Data^.Table is TTableA then begin
      TTableA(Data^.Table).Caption:='Caption: TableA';
      TTableA(Data^.Table).Name:='TableA';
    end if Data^.Table is TTableB then begin
      TTableB(Data^.Table).Caption:='Caption: TableB';
    end;
  end;
end;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 02:29
Hallo, ich kenn mich zwar mit dem VST nicht wirklich aus, aber könnte man nicht einfach das Objekt direkt in Data ablegen und sich den Record sparen? Objekte sind doch auch nichts anderes als Pointer.

So habe ich es zumindest bei anderen Komponenten bisher immer gemacht.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#6

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 03:07
Zitat von omata:
Im Record ein Objekt ablegen und eben unterschiedliche Objekte designen. Dann ist die Unterscheidung leicht möglich und die unterschiedlichen Daten können sinnvoll abgelegt werden.
Dann kannst du den Record auch weg lassen.
Schau dir mal das Stammtischvideo an. Dort habe ich das erklärt.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 03:18
Ich frage mich eher, warum Omata das im OnChange macht ? Der Code ist mir insoweit auch klar. Aber nicht das Zusammenspiel mit dem VST. Habe das jetzt mal soweit umgesetzt, dass das Programm läuft (aöso nicht lediglich compiliert !). Aber der Tree zeigt nichts an. Mir ist noch nicht ganz klar, wo der Typ genau gesetzt werden muss. Der VST ist komplizierter zu bestücken, als erwartet. Allerdings bin ich damit auch erst einen Tag beschäftigt. 8) Wegen der ganzen Type-Castings landet der bei Tests immer in falscher Zeile, greift dann auf falsche Tabelle zu und es kracht.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 12:43
Ich benutze dort gern das Record und nicht nur ein Objekt, dann ist man noch flexibler, wenn es um Erweiterungen geht.

OnChange war nur ein Beispiel. Damit etwas angezeigt wird, ist das OnGetText-Ereignis nötig. Dort kann bzw. muss man selber dafür sorgen, dass etwas angezeigt wird.

Also...
Delphi-Quellcode:
procedure TForm.VSTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var Data:PNodeData;
begin
  Data:=Sender.GetNodeData(Node);
  if assigend(Data) then begin
    if Data^.Table is TTableA then
      CellText:=TTableA(Data^.Table).Caption
    else if Data^.Table is TTableB then
      CellText:=TTableB(Data^.Table).Caption;
  end;
end;
Oder auch...
Delphi-Quellcode:
procedure TForm.VSTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var Data:PNodeData;
begin
  Data:=Sender.GetNodeData(Node);
  if assigend(Data) then
    CellText:=TNodeObject(Data^.Table).Caption;
end;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 13:42
Das habe ich genauso. Hier taucht das Problem auf :

Delphi-Quellcode:
if Data^.Table is TTableA then
   TTableA(Data^.Table).Caption := LeseFeld // aus TTableA
else
  TTableB(Data^.Table).Nr := LeseFeld // aus TTableA
An der Stelle geht es nur um TTableA. Der landet aber im else-Zweig. Deshalb ist anzunehmen, dass zumindest "is TableA" falsch ist. Zu guter Letzt kommt jedenfalls Zugriffsverletzung.

Vielleicht besser etwas mehr :
Delphi-Quellcode:
Node := vstZeigTour.AddChild(nil);
Data := vstZeigTour.GetNodeData(Node);
vstZeigTour.ValidateNode (Node, False);
if assigned(Data) then begin
if Data^.Table is TTour then
  TTableA(Data^.Table).Caption := LeseFeld //..
else
  TTableB(Data^.Table).Nr := LeseIntFeld //..
end;
Wo soll denn dem Knoten überhaupt gesagt werden, ob es sich um TableA oder TableB handelt ? Daran wirds wohl liegen.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: [VST]gemischte Daten aus 2 Tabellen ?

  Alt 23. Dez 2009, 22:23
Du mußt doch irgendwo dein Objekt erzeugen... und genau dort wird auch festgelegt, um welches Objekt es sich handelt...
Delphi-Quellcode:
var Tour:TTour;
begin
  Node := vstZeigTour.AddChild(nil);
  Data := vstZeigTour.GetNodeData(Node);
  Tour:=TTour.Create;
  Tour.Caption := LeseFeld;
  Data^.Table:=Tour;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz